- 博客(53)
- 收藏
- 关注
原创 代码随想录算法训练营第59天|503. 下一个更大元素 II,42. 接雨水
链接: 503. 下一个更大元素 II链接: 42. 接雨水关于循环数组的解题方法:
2023-09-23 20:36:41
285
原创 代码随想录算法训练营第58天|739. 每日温度,496.下一个更大元素 I (单调栈开始)
链接: 739. 每日温度链接: 496.下一个更大元素 I单调栈入门题这题的关键时保证了栈内所有的元素都是单调递增的(单调栈)
2023-09-23 12:41:03
300
原创 代码随想录算法训练营第57天| 647. 回文子串,516.最长回文子序列,动态规划总结
链接: 647. 回文子串链接: 516.最长回文子序列链接: 动态规划总结理解dp数组的含义很重516.最长回文子序列
2023-09-23 11:04:16
270
原创 代码随想录算法训练营第56天|583. 两个字符串的删除操作,72. 编辑距离 (昨天的疑虑今天豁然开朗了)
链接: 583. 两个字符串的删除操作链接: 72. 编辑距离 72. 编辑距离动规五部曲:最重要的是理解dp数组的含义
2023-09-23 09:54:55
107
原创 代码随想录算法训练营第55天|392. 判断子序列,115.不同的子序列
链接: 392. 判断子序列链接: 115.不同的子序列115.不同的子序列这道题目还没太弄懂初始化怎么来的。以及状态转移方程的推导
2023-09-22 21:25:03
272
原创 代码随想录算法训练营第53天|1143. 最长公共子序列,1035. 不相交的线,53. 最大子数组和
链接: 1143. 最长公共子序列链接: 1035. 不相交的线链接: 53. 最大子数组和1035. 不相交的线这一题和上一题一模一样
2023-09-21 21:36:28
157
原创 代码随想录算法训练营第52天|300. 最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
链接: 300. 最长递增子序列链接: 674. 最长连续递增序列链接: 718. 最长重复子数组
2023-09-21 17:48:23
213
原创 代码随想录算法训练营第51天|309. 买卖股票的最佳时机含冷冻期,714. 买卖股票的最佳时机含手续费,股票问题总结
需要分析清楚股票的状态(持有,卖出等)然后根据不同的状态设置dp数组。同时也需要根据不同的状态推出递推公式链接:股票问题总结。
2023-09-20 13:42:09
64
原创 代码随想录算法训练营第50天|123. 买卖股票的最佳时机 III,188. 买卖股票的最佳时机 IV
【代码】代码随想录算法训练营第50天|123. 买卖股票的最佳时机 III,188. 买卖股票的最佳时机 IV。
2023-09-18 13:47:33
87
原创 代码随想录算法训练营第49天|121. 买卖股票的最佳时机,买卖股票的最佳时机II
链接: 121. 买卖股票的最佳时机链接: 122.买卖股票的最佳时机II给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的
2023-09-15 12:56:21
102
原创 代码随想录算法训练营第48天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III
同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
2023-09-14 21:26:50
96
原创 代码随想录算法训练营第46天| 单词拆分,背包问题总结
链接:参考文章动态规划五部曲确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组背包递推公式问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);问装满背包有几种方法:dp[j] += dp[j - nums[i]];问背包装满最大价值:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
2023-09-14 13:29:50
312
原创 代码随想录算法训练营第43天|1049.最后一块石头的重量II,494.目标和
这道题目和分割等和子集很像。关键在于想到如何把石头分为重量相近的两堆。sum += x;// 向下取整,所以sum - dp[target] >= dp[target]// 初始化dp[0] = 0;i++){j--){
2023-09-11 19:40:19
184
原创 代码随想录算法训练营第45天|70. 爬楼梯, 322. 零钱兑换, 279. 完全平方数
链接: 70. 爬楼梯链接: [322. 零钱兑换](https://programmercarl.com/0322.%E9%9B%B6%E9%92%B1%E5%85%91%E6%8D%A2.html)链接: 279. 完全平方数仔细一看是一个排列问题,排列强调顺序322. 零钱兑换这道题既不强调排列也不强调组合所以,背包和物品的遍历顺序可以随意279. 完全平方数这一题和上一题有异曲同工之妙,同样不是排列组合问题,背包和物品的遍历顺序随意
2023-09-11 17:56:02
60
原创 代码随想录算法训练营第44天|518.零钱兑换II,377. 组合总和 Ⅳ
如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。
2023-09-11 11:58:55
198
原创 代码随想录算法训练营第42天| 01 背包问题,416. 分割等和子集
链接: 01 背包问题 二维数组链接: 01 背包问题 一维数组链接: 416. 分割等和子集这道题很懵,可能需要重做
2023-09-06 13:36:56
251
原创 代码随想录算法训练营第41天| 96.不同的二叉搜索树
链接: 96.不同的二叉搜索树递推公式有点难想到,没有考虑到左子树数量和右子树数量相乘的关系。这道题目需要利用二叉搜索树的特征并思考头节点数值和左右子树数量的关系。
2023-09-06 11:59:39
84
原创 代码随想录算法训练营第39天|62.不同路径,63. 不同路径 II,343. 整数拆分
链接: 62.不同路径链接: 63. 不同路径 II链接: 343. 整数拆分数组初始化不太容易想得到63. 不同路径 II代码实现时初始化条件不太清楚除了错误343. 整数拆分这一题很难,还是没有明白为什么需要将dp[i] 和 j*(i-j) 以及 j*dp[i-j] 比较
2023-09-05 14:35:50
676
原创 代码随想录算法训练营第38天|动态规划开启!509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
链接: 509. 斐波那契数链接: 70. 爬楼梯链接: 746. 使用最小花费爬楼梯70. 爬楼梯746. 使用最小花费爬楼梯遇到的困难实现的时候没有注意dp数组的大小是需要大于cost数组的大小的
2023-09-05 13:01:34
127
原创 代码随想录算法训练营第36天|435. 无重叠区间,763.划分字母区间,56. 合并区间
参考文章链接: 435. 无重叠区间链接: 763.划分字母区间链接: 56. 合并区间这题和昨天写得射气球的题很像763.划分字母区间思路如下56. 合并区间这题其实和今天的第一题很像,思路几乎一样,只需要清楚什么时候更新右边界就可以
2023-08-31 20:45:24
32
原创 代码随想录算法训练营第35天|860. 柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
参考文章链接: 860. 柠檬水找零链接: 406.根据身高重建队列链接: 452. 用最少数量的箭引爆气球自己写的版本 太耗时了 16ms时间复杂度 O(n)空间复杂度 O(n)优化版本 2ms时间复杂度 O(n)空间复杂度 O(n)406.根据身高重建队列这一题和按分数分发糖果的题很想,都是由两个维度需要处理,遇到多个维度问题,需要从不同的维度分开处理而不是同时处理两个维度。452. 用最少数量的箭引爆气球遇到的困难1 不知道如何表达重叠区间2 没有考虑到最小右边界的情况
2023-08-29 13:19:53
61
原创 代码随想录算法训练营第34天|1005. K 次取反后最大化的数组和,134. 加油站,135. 分发糖果
如果剩余油量的目前累加和小于0就换一个起点,如果整个数组的累加和小于0则说明无论从哪个起点出发都无法跑完一圈。比较难想到的是从后向前比较。
2023-08-28 17:42:42
28
原创 代码随想录算法训练营第32天| 122. 买卖股票的最佳时机 II,55. 跳跃游戏,45.跳跃游戏 II
这一题和前面一题很像但是要难很多,很多细节想不到,比如什么时候更新cur这个变量。此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!解题关键为把每一次跳跃当成可以覆盖的最大范围。(开始根本没这样想所以卡了很久)
2023-08-26 17:37:56
28
原创 代码随想录算法训练营第31天|455. 分发饼干,376. 摆动序列,53. 最大子序和
解题关键为,在遍历数组是改变连续和开始的下标,当发现连续和小于0了直接将sum清零,重新开始标记。看讲解中的动画演示理解会更加深刻。
2023-08-25 13:44:06
36
原创 代码随想录算法训练营第30天| 回溯法完结撒花,332.重新安排行程,51. N 皇后,37. 解数独
牢记神仙模板void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);// 递归回溯,撤销处理结果区分好树层去重和树枝去重的概念并学会运用链接:参考讲解知道递归啥时候有返回值啥时候没有返回值链接:参考讲解。
2023-08-24 19:50:44
130
原创 代码随想录算法训练营第29天|491. 递增子序列, 46. 全排列, 47.全排列 II
去重是关键,这里又用到了used数组,在这里used数组不再作为数层的标记,而是负责树枝的修剪。这一题因为又前面的基础所以做的很快。,如果是全排列的话也需要考虑。
2023-08-23 18:23:48
31
原创 代码随想录算法训练营第28天|93. 复原 IP 地址,78. 子集,90. 子集 II
这题和之前做的组合总和很像,这一题也涉及到数层去重的问题。因为之前做过类似的题所以这题解起来比较顺利。这道题的思路和切割回文串很相似,就是判断字符串合法性函数复杂了亿些。与之前的组合问题不同的是这次要求收集每一个叶子节点。
2023-08-23 14:39:44
29
原创 代码随想录算法训练营第27天|39. 组合总和,40. 组合总和 II,131.分割回文串
写完这一题让我对排列组合有了更加深刻的理解。这道题的难点为去重,需要理解树层去重。
2023-08-22 20:51:28
27
原创 代码随想录算法训练营第25天|216. 组合总和 III,17. 电话号码的字母组合
【代码】代码随想录算法训练营第25天|216. 组合总和 III,17. 电话号码的字母组合。
2023-08-22 18:53:47
28
原创 代码随想录算法训练营第24天| 回溯理论基础,77. 组合
for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历。解题的关键在于,回溯的过程以及剪枝的优化。
2023-08-22 11:50:07
44
原创 代码随想录算法训练营第23天|二叉树完结撒花|669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树
链接:二叉树总结。
2023-08-21 20:29:20
42
原创 代码随想录算法训练营第22天|235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作,450. 删除二叉搜索树中的节点
从上向下遍历,第一次遇到cur节点是数值再[p,q]区间中,那么这个节点就是p和q的公共祖先。这里利用二叉搜索树的特性,直接递归,并不需要修改树的结构,遇到合适的空节点直接插入就可以。这道题需要分情况讨论,最难的情况为要删除的节点左右子树都不为空。二叉搜索树的遍历方向已经固定了。(大的往右,小的往左)解决这道题的关键是理解二叉搜索树的性质。
2023-08-18 20:45:55
63
1
原创 代码随想录算法训练营第21天|530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
这题的解题关键是后序遍历的顺序,从底往上遍历。通过中序遍历得到有序序列。然后利用双指针快速解题。中序遍历处理二叉搜索树(出来是有序数列)第二种情况的完整流程图。
2023-08-18 18:22:07
58
1
原创 代码随想录算法训练营第20天|654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树
初始化rootIndex和max不要直接赋值为0,需要把当前数组最左边的元素赋值给他俩。自己做的时候对左右下标的分析不准确,这导致我在判断递归出口条件时出了问题。这道题的解题关键为,二叉树中序遍历之后为有序数组。这里直接借用第一个树的身体改造成新的合并二叉树。这一题注意利用二叉搜索树的性质来解题,会快很多。递归的诀窍是,先弄清楚最底层有什么样的操作。只需要验证遍历的元素是否为从小到大排列。空二叉树也是二叉搜索树。
2023-08-17 21:27:01
87
1
原创 代码随想录算法训练营第18天|513. 找树左下角的值,路径总和,从中序与后序遍历序列构造二叉树
这里的递归需要注意的地方是,是从除了根节点以外的节点开始遍历,所以在传参时需要减去根节点的值。
2023-08-16 15:23:44
241
1
原创 代码随想录算法训练营第17天|110. 平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
写本题还是使用后序遍历(左右中)求左右子树的高度,然后根据左右子树差值的绝对值大小判断是否为平衡树。一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
2023-08-16 12:50:15
60
1
原创 代码随想录算法训练营第16天|104. 二叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数
普通二叉树写法(后序遍历,左右中)
2023-08-14 21:40:15
22
原创 代码随想录算法训练营第15天|今天一口气12道题
同样的思路,不同的说法,左右孩子变成了列表,只需要检查链表是否为空,然后再将列表内节点存入队列内就可。利用广度优先搜索,当遍历的节点左右孩子都为空时就说明为最低点。这道题注意将第一个节点的情况和之后节点的情况分清楚。最后把结果反转一下,思路和代码和前一题一摸一样。每一层的均值可以在遍历时就算好,这样更简单。把每一层最后一个节点数值加进结果集就好。
2023-08-11 20:34:42
40
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人