- 博客(114)
- 收藏
- 关注
原创 代码随想录算法训练营第51期第37天 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
背包空出物品i的容量后,背包容量为j - weight[i],dp[i][j - weight[i]] 为背包容量为j - weight[i]且不放物品i的最大价值,那么dp[i][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。本题呢,dp[i]有几种来源,dp[i - 1],dp[i - 2],dp[i - 3] 等等,即:dp[i - j]首先,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0。
2025-01-29 12:28:50
728
原创 代码随想录算法训练营第51期第36天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
1049. 最后一块石头的重量 II1.重点是理解这个01背包,将这道题转换为01背包2.首先,计算所有石头的总重量。我们的目标是找到一种方法,将石头分成两堆,每堆的重量尽可能接近。因为如果能做到这一点,那么两堆石头相互粉碎后剩下的石头重量就会是最小的。3.背包问题转化接下来,我们可以将这个问题转化为一个背包问题。假设有一个背包的容量为,我们要选择一些石头放入背包,使得背包中的石头总重量最接近但不超过。4.动态规划求解后,计算结果。完成动态规划后,我们可以得到容量为的背包能装入的最大石头重量。
2025-01-10 23:43:16
294
原创 代码随想录算法训练营第51期第35天 | 01背包问题基础、01背包问题2: 滚动数组、416. 分割等和子集
背包问题好难啊,前前后后理解了好几次,拖了将近一周,才弄懂了这道题,会用C语言写这道题写写思路吧背包问题总览主要掌握01背包和多重背包,本节主要掌握01背包。
2025-01-05 19:28:17
878
原创 代码随想录算法训练营第51期第34天 | 62.不同路径、63. 不同路径 II、343.整数拆分、96.不同的二叉搜索树
62. 不同路径我好像确实会一点动态规划了,就像这道题,我看了一眼,大概就会写了1.这题用python先试了一下,直接ac2.C语言更多的是学习了二维数组的malloc,学到了动态规划五部曲1.确定dp数组以及下标的含义:dp[i][j]表示到[i, j]这个位置时到达的方法数2.确定递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1];3.dp数组如何初始化:这里因为只能向右或者向下,所以数组第一排和第一列值都是14.遍历次序:正常遍历二维数组的次序。
2025-01-01 17:37:12
1074
原创 代码随想录算法训练营第51期第32天 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
动态规划:dp,每一个状态都是由上个状态推导出来的,因为我是先写完三道题再看理论的,所以有点感概;
2024-12-29 23:24:56
711
原创 代码随想录算法训练营第51期第31天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树 (可跳过)、总结
968.监控二叉树 (可跳过)738.单调递增的数字。
2024-12-29 22:48:05
142
原创 代码随想录算法训练营第51期第30天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
452. 用最少数量的箭引爆气球。763.划分字母区间。435. 无重叠区间。
2024-12-29 22:47:08
106
原创 代码随想录算法训练营第51期第29天 | 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
134. 加油站1.一开始用的是暴力法,就for循环里面套while,超时了,用了随想录上面的C++,也超时了;2.直接看的贪心的解法,最后不需要取模来得出索引。
2024-12-29 22:45:21
418
原创 代码随想录算法训练营第51期第28天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II、1005.K次取反后最大化的数组和
122. 买卖股票的最佳时机 IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/1.我刚刚看了一下之前用C++写题的时候,自己说了句【我好像记得这道题是怎么写的,也不知道是福是祸】会心一笑,好像不是坏事,过了这么久了,我还是记得,说明我会呀2.很简单哈,就是搜集区间为正数的每日收入,加起来就行了,有一说一,这个是不是画个坐标系,然后统计每个上升区间的差值就可以了55. 跳跃游戏55. 跳跃游戏https://leet
2024-12-26 00:35:16
397
原创 代码随想录算法训练营第51期第27天 | 理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
b. [1,2,2,2,1]数组,可以抽象为 [1,2,1],允许pre = 0 and cur > 0 和 pre = 0 and cur < 0。2.这里局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。d.最后一个,在单调坡度有平坡的情况,是在摆动的时候再更新pre,所以pre放在if里面。2.也有大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩;4.C的写法,学习掌握qsort()的使用方法;
2024-12-25 22:01:30
361
原创 代码随想录算法训练营第51期第25天 | 491.递增子序列、46.全排列、47.全排列 II、332.重新安排行程、51.N皇后、39.解数独
491. 非递减子序列1.这题我一开始按照子集的思路去做,去重做的不充分2.这里还是使用uset,记录同层的元素,如果后面的元素在uset有,说明是重复的,不使用3.这里题目预留了一个陷阱,他说让你求递增子序列,但是他给的数组可以不是,可以是[4,7,6,7],而不必是[4,6,7,7],4.可以要用nums[i]和path的最后一位判断,而不是nums[i]和nums[i-1]做判断,就像3里我举的例子。
2024-12-24 00:31:03
280
原创 代码随想录算法训练营第51期第24天 | 93.复原IP地址、78.子集、90.子集II
93. 复原 IP 地址这题确实和 131.分割回文串 基本一致,一个判断回文,一个判断地址,所以确实不难。
2024-12-22 19:00:37
431
原创 代码随想录算法训练营第51期第23天 | 39. 组合总和、40.组合总和II、131.分割回文串
39. 组合总和1.这里和之前的题目不太一样,数字可以被重复选取,体现在代码里就是原来是startIndex,现在直接用index就可以了,换个说法,原来在backtracking()里是i+1,这里直接用i就可以了2.这里backtracking(的参数是val, target, index),每次递归之前都对val做了处理,在递归后还原,如果是优化的话,可以直接写backtracking(val + candidates[i], target, index),这样其实省略了回溯的过程的。
2024-12-21 01:07:32
811
原创 代码随想录算法训练营第51期第22天 | 回溯算法理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合
我先写最新的,免的欠太多不写了。
2024-12-19 01:20:52
611
原创 代码随想录算法训练营第51期第21天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇
669. 修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树总结篇
2024-12-19 00:48:00
378
原创 代码随想录算法训练营第51期第20天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
235. 二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点
2024-12-19 00:46:56
108
原创 代码随想录算法训练营第51期第18天(19休息) | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236. 二叉树的最近公共祖先
2024-12-19 00:45:54
129
原创 代码随想录算法训练营第51期第17天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
654. 最大二叉树1.这题递归很好做,但是我确实写了三次才明白原因,层层把数组打散往下递归,直到数组为空2.这里python直接使用切片,是特有方法,如果是C或C++,是需要把数组和左右的下标传入的。
2024-12-18 00:55:39
513
原创 代码随想录算法训练营第51期第16天 | 513.找树左下角的值、112. 路径总和 113.路径总和ii、106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
MD,被忽悠了,看起来3题,实际上有5题。
2024-12-16 02:18:21
996
原创 代码随想录算法训练营第51期第15天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
110. 平衡二叉树1.这道题是文心一言给的参考,我觉的比卡哥的要好。
2024-12-12 00:20:49
251
原创 代码随想录算法训练营第51期第14天 | 226. 翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
226. 翻转二叉树1.昨天忘了声明,如果都用C的话,我大概率写不完,所以思路方面,我可能考虑用pyhon先写,后续会用文心一言转换成C2.这里可以直接用层序遍历的写法写出来,但是卡哥说要掌握递归。
2024-12-10 23:57:27
410
原创 代码随想录算法训练营第51期第11天 (12休息)| 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、总结
150. 逆波兰表达式求值。347.前 K 个高频元素。239. 滑动窗口最大值。
2024-12-09 08:08:03
125
原创 代码随想录算法训练营第51期第10天 | 理论基础 、232. 用栈实现队列、225. 用队列实现栈、 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
1047. 删除字符串中的所有相邻重复项。232. 用栈实现队列。225. 用队列实现栈。
2024-12-09 08:06:49
99
原创 代码随想录算法训练营第51期第9天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾
1.注意看removeSpace里面start和end。这个C语言的写法比python有意思一点,值得学习。151. 反转字符串中的单词。
2024-12-06 00:12:22
315
原创 代码随想录算法训练营第51期第8天 | 344. 反转字符串、541.反转字符串 II、卡码网:54.替换数字
344. 反转字符串1.这道题很简单,直接使用双指针就可以2.这里有一个可以优化的点,left++和right-- 可以放在字符串替换的时候完成,没必要单独写。
2024-12-05 00:13:28
413
原创 代码随想录算法训练营第51期第7天 | 454. 四数相加 II、383. 赎金信、15. 三数之和
454. 四数相加 II1.还是复习hash的用法,和两数之和一样的写法,其实这里考虑不封装函数,但是目前熟练度不够,还得写几天再说。
2024-12-04 22:26:06
203
原创 代码随想录算法训练营第51期第6天 | 哈希表理论基础、242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
242. 有效的字母异位词哈希表的基础应用,就26个基础字母,直接用数组就可以了,也不用大费周章写hash,我还得看看哈希怎么写。
2024-12-03 00:52:29
283
原创 代码随想录算法训练营第51期第4天(第5休息) | 24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结点、面试题 02.07. 链表相交、142. 环形链表 II
24. 两两交换链表中的节点这题的总体思路还是和卡哥一样的,不过我没创立两个临时变量,那不过确实要清晰一些我的思路卡哥的写法其实都是一样的,思路如下C语言有个讨厌的点,就是需要free,老是忘记。
2024-12-02 01:42:20
702
原创 代码随想录算法训练营第51期第3天 | 203. 移除链表元素、27. 移除元素
203. 移除链表元素1.这里tmp是malloc的,我原来是直接return tmp->next,但是malloc完不free,会有内存泄漏的风险,所以最后用head接收,把tmp在return之前free掉。
2024-11-30 23:15:40
224
原创 代码随想录算法训练营第51期第2天 | 209. 长度最小的子数组、59. 螺旋矩阵 II、区间和
相比前两次有了变化啊这里题目多了区间和和开发商,md,不会啊,这不就是kmp算法嘛,周五再看吧。
2024-11-29 01:56:10
132
原创 代码随想录算法训练营第51期第1天 | 704. 二分查找、27. 移除元素
这是我第三次参加了,第一次参加,勉强完成,第二次参加,半途而废,现在第三次,会有好的结果么?好好加油,所有努力学习的东西,最终都不会辜负你的期待。来吧,C语言数组理论基础1.数组是连续的空间,不能删除,只能覆盖;2.数组下标从0开始;3.今天看C和指针的时候,int a[2][3],指的是2行3列,行列式,a是常量指针。
2024-11-27 23:01:01
388
1
原创 代码随想录算法训练营第17期第34天 | 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
这里说一下卡哥和我的区别,基本思路是一样的, 只是卡哥这里只需要一次排序,而我这边排了两次;2.从前往后遍历,求遍历值的和,如果当前数为负数,则增加其负数,同时k--;3.如果最后k还大于0且为奇数,再从小到大排序,减去2倍最小的数;2.从前往后遍历,遇到负数将其转换为整数,并k--;3.如果最后k还大于0且为奇数,则减去2倍最小的数;1.按照绝对值大小从大到小排序。
2023-09-01 01:37:51
233
原创 代码随想录算法训练营第17期第32天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
我好像记得这道题是怎么写的,也不知道是福是祸
2023-08-26 01:43:50
235
原创 代码随想录算法训练营第17期第29天 | 491. 递增子序列、46. 全排列、 47. 全排列 II
b.按照第三层的逻辑,前面取7组成【4,7】,当遇到第二个7的时候,就不取了,所以这里需要设置一个map,当然这里值少,用list也行,map的话,写法是【uset.find(nums[i])!= uset.end()】表示找到了,list的话,采用【int used[201] = {0};和used[nums[i]+100] == 1)】,因为这题的要求是【a.题目要求是递增子序列,所以,nums[i]要>=path.back(),故path里面必须要有值,所以,条件之一是【!】,最多201个数;
2023-08-07 01:44:04
134
原创 代码随想录算法训练营第17期第28天 | 93.复原IP地址 、78.子集 、 90.子集II
这一题确实就是动态规划的模板,一开始我还考虑了如何停止,后来发现不用,因为start_index在逐次上升,自然就会停止,直接收集结果就可以;因为是直接push_back(path),连path是[]的情况也包含了,不需要额外处理;1.当点号有三个之后,当最后一部分数值是有效的话, 就可以加入结果集了。
2023-08-05 01:16:13
170
原创 代码随想录算法训练营第17期第27天 | 39. 组合总和、40. 组合总和 II、 131. 分割回文串
如果不从头开始遍历的话,i = start_index。
2023-07-27 02:13:31
144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅