- 博客(54)
- 收藏
- 关注
原创 代码训练营总结篇
跟着代码随想录,我第一次相对完整地完成了代码题库的学习。在很多时候,一天的工作量是很多的,比较忙,如果没有打卡机制,可能我早就放弃了,根本就坚持不下去。在群里,每天都有群友在讨论问题,一起坚持打卡,帮助了我很多东西。代码随想录的题目+代码+教程是非常完整的,后续还会二刷、三刷等,也推荐大家一起来学习。
2025-01-02 13:22:26
106
原创 代码随想录算法训练营第六十天 | Bellman_ford 队列优化算法(又名SPFA) bellman_ford之判断负权回路 bellman_ford之单源有限最短路
96. 城市间货物运输 III。95. 城市间货物运输 II。94. 城市间货物运输 I。
2024-12-30 15:06:55
167
原创 代码随想录算法训练营第五十八天 | 拓扑排序精讲 dijkstra(朴素版)精讲
【代码】代码随想录算法训练营第五十八天 | 拓扑排序精讲 dijkstra(朴素版)精讲。
2024-12-27 12:06:10
293
原创 代码随想录算法训练营第五十七天 | prim算法精讲 kruskal算法精讲
【代码】代码随想录算法训练营第五十七天 | prim算法精讲 kruskal算法精讲。
2024-12-26 16:11:19
235
原创 代码随想录算法训练营第五十二天 | 101. 孤岛的总面积 102.沉没孤岛 103.水流问题 104.建造最大岛屿
101. 孤岛的总面积。104.建造最大岛屿。
2024-12-26 15:04:45
232
原创 代码随想录算法训练营第四十八天 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
496.下一个更大元素 I。503.下一个更大元素II。
2024-12-19 11:53:44
224
原创 代码随想录算法训练营第四十五天 | 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离
583. 两个字符串的删除操作。115.不同的子序列。
2024-12-13 14:26:31
150
原创 代码随想录算法训练营第四十四天 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列
1143.最长公共子序列。1035.不相交的线。
2024-12-12 22:51:58
181
原创 代码随想录算法训练营第四十三天 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
674. 最长连续递增序列。718. 最长重复子数组。300.最长递增子序列。
2024-12-11 18:02:26
202
原创 代码随想录算法训练营第四十二天 | 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
714.买卖股票的最佳时机含手续费。309.最佳买卖股票时机含冷冻期。188.买卖股票的最佳时机IV。
2024-12-10 20:28:52
216
原创 代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III
123.买卖股票的最佳时机III。122.买卖股票的最佳时机II。121. 买卖股票的最佳时机。
2024-12-09 18:46:39
174
原创 代码随想录算法训练营第三十九天 | 198.打家劫舍 213.打家劫舍II 337.打家劫舍III
337.打家劫舍III。213.打家劫舍II。
2024-12-08 20:23:18
211
原创 代码随想录算法训练营第三十八天 | 322. 零钱兑换 279.完全平方数 139.单词拆分
【代码】代码随想录算法训练营第三十八天 | 322. 零钱兑换 279.完全平方数 139.单词拆分。
2024-12-06 22:42:11
299
原创 代码随想录算法训练营第三十七天 | 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯 (进阶)
完全背包和01背包的区别在于,在遍历背包容量时01背包从大到小遍历,保证每个物品只能取1次,而完全背包问题从小到大遍历,使得物品可以被多次选取。思路:排列问题,与上题的组合问题有着明显的差距。518. 零钱兑换 II。70. 爬楼梯 (进阶)377. 组合总和 Ⅳ。
2024-12-05 12:38:31
222
原创 代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
思路:同样分为两个集合,left-right=target,left+right=sum,right = sum - left;思路:两两石头粉碎,实际上就是尽可能的平分,然后看两个集合相差多少。1049. 最后一块石头的重量 II。
2024-12-05 10:45:53
151
原创 代码随想录算法训练营第三十五天 | 01背包问题 二维 01背包问题 一维 416. 分割等和子集
思路:若能平分集合,那么其总和必须是偶数,如果和为奇数则直接返回false。剩下我们的目标就是找数字凑够sum/2。416. 分割等和子集。
2024-12-03 19:48:09
231
原创 代码随想录算法训练营第三十四天 | 62.不同路径 63. 不同路径 II
思路:在初始化的时候,上边界和左边界中存在障碍,则边界中的后续都为0。把有障碍的位置路径和置为0。然后还是一样的操作dp[i][j] = dp[i-1][j] + dp[i][j-1];思路:先初始化上边界和左边界,第i,j位的路径和等于其上方路径量与左方路径量之和。63. 不同路径 II。
2024-12-02 12:53:43
275
原创 代码随想录算法训练营第三十二天 | 动态规划 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
思路:每阶楼梯的花费 应该是前n-1阶的花费或前n-2阶的花费的最小值,若当前层数没到楼顶就加上当前层数的花费。思路:第n阶 可以由第n-1阶爬一阶 和第n-2阶爬两阶完成。746. 使用最小花费爬楼梯。509. 斐波那契数。
2024-11-30 12:46:06
159
原创 代码随想录算法训练营第三十一天 | 56. 合并区间 738.单调递增的数字
思路:遇到前一位大于后一位的,后一位置为9,前一位减一;而且还不能在遍历的时候就将数字置为9,会影响到后续的判断;检测到符合条件的位置,然后将后面数字全部置为9即可。思路:先排序,初始化左右边界,若元素左值小于等于右边界,则更新右边界,否则将结果存进res。738.单调递增的数字。
2024-11-29 11:04:10
130
原创 代码随想录算法训练营第三十天 | 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
思路:先排序,然后比较是否存在覆盖,若无覆盖则箭的数量加一;存在覆盖时,由于左边界是越来越小的,也就是说此时元素的第一个值就是覆盖区间的左边界,而右边界则是该元素第二个值和之前覆盖范围右边界中的较小值。思路:记录每个字母出现的最大下标,依次遍历,直到在某一范围内下标的最大值等于索引值,将结果放入列表中。思路:类似于上一题,当存在覆盖时,须移除数量加一,待检查的右边界更新为覆盖的右边界。452. 用最少数量的箭引爆气球。435. 无重叠区间。763.划分字母区间。
2024-11-28 10:53:04
135
原创 代码随想录算法训练营第二十九天 | 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列
思路:若gas总和小于cost总和,则一定不能绕环路一周;从某个位置开始,若差值和出现负数,则表示从该位置出发不能达到目的。思路:先考虑右孩子大于左孩子的情况,进行糖果分配,然后再从后往前遍历左孩子大于右孩子的情况,糖果分配取两个结果的最大值。思路:先按身高对人群进行排列(身高相同的话,k小的排前面),然后依次遍历,k值就表示当前people该插入的位置。思路:统计5美元、10美元的数量,来钱时数量增加,找零时数量减少,若出现负数则说明不能正确找零。406.根据身高重建队列。
2024-11-27 14:39:31
160
原创 代码随想录算法训练营第二十八天 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和
思路:若当前的跳跃范围未能覆盖最后一个元素,那么次数一定会加一。用nextDistance来记录跳跃范围内下次跳跃的最大范围,以此类推,更新跳跃范围。思路:先将k值用在负数上,更小的负数先转变为正数。若k值还有冗余,则全部用在最小的正整数上。思路:该问题的关键在于跳跃的范围能不能覆盖到最后一个位置,不必要去考虑每一步跳跃的最优解。思路:贪心算法思想就是,只有后一天减去前一天的价格差值为正数时,才会计入结果即可。动态规划: dp[i][0]代表第i天未买入,dp[i][1]代表第i天已买入。
2024-11-27 12:53:16
168
原创 代码随想录算法训练营第二十七天 | 455.分发饼干 376. 摆动序列 53. 最大子序和
思路:贪心思想,通过差值的变化来确定峰顶和峰谷结点的数量。下段代码的关键点在于,prediff只在确定摆动时更新。思路:贪心思想,尽可能地将大饼干给大胃口。思路:依次遍历,当和为负数时,就重新计数。贪心算法:通过局部最优解来得到全局最优解。
2024-11-25 12:56:53
197
原创 代码随想录算法训练营第二十五天 | 491. 非递减子序列 46.全排列 47.全排列 II
思路:该题的关键在于在树的同一层不能选择值相同的元素,所以需要创建一个记录元素是否使用过的记录表,可以用数组也可以用哈希表。而且,需要在循环内回溯函数内创建,这样能保证记录的是同一层元素的使用情况,到下一层时会自动重新创建,相当于清空操作。思路:全排列的思路在于元素有顺序,将每一个元素都选一次,所以for循环回溯遍历的时候,每次都从0下标开始。若遇到已经选择过的元素跳过即可。思路:关键点还是在于去重,以及重复数据的选取问题。491. 非递减子序列。
2024-11-24 19:29:08
214
原创 代码随想录算法训练营第二十四天 | 93.复原IP地址 78.子集 90.子集II
思路:子集问题跟组合问题的区别在于:若将两种问题看成树处理,组合问题要的结果是叶子节点,而子集问题的结果是树中的所有节点。所以求解子集问题的关键点在于每次回溯的时候都将路径添加到res结果中即可。思路:该题中存在重复数据,但是不能存在重复子集,处理方案跟组合总和Ⅱ一样,需要判断当前元素值是否被重复使用。思路:类似于切割回文字符串,如果当前字符串有效则加“.”点。
2024-11-22 15:28:02
218
原创 代码随想录算法训练营第二十三天 | 39. 组合总和 40.组合总和II 131.分割回文串
思路:类似于题目:组合,唯一的区别在于此题元素可以重复使用,即在调用回溯函数时索引不是i+1,而是i。注:此题若不进行剪枝处理,将会报错。由于剪枝处理的处理逻辑是,当前sum已经大于目标值就退出,所以要将较小的数放在前面,即先对数组进行排序。思路:主题思路跟组合总和一致,区别1在于不能重复选择元素,所以回溯时传的index是i+1;区别2在于有重复的数据,但是结果不能有重复的组合,所以需要进行去重,即之前选择过的元素在同一层不能在此选择。思路:该题的关键是在于判断是否为回文字符串。
2024-11-21 23:12:29
188
原创 代码随想录算法训练营第二十二天 | 回溯算法 77. 组合 216.组合总和III 17.电话号码的字母组合
思路:类似上一题的思路,多一个变量sum,使得终止条件变成path.size()==k && sum == n;思路:本题思想的关键在于每次回溯不同的字符串,也就是不同字符串之间来回选取,思路与之前题目类似。思路:先从集合中挑选一个,然后在剩下的集合中挑,以此类推,直到挑选的数量等于k。剪枝处理:1.如果数量不够,不进行遍历;2.如果sum提前大于n,直接退出;剪枝处理:如果剩余的集合数量不足以挑选k个,直接退出即可。17.电话号码的字母组合。216.组合总和III。
2024-11-20 16:21:07
222
原创 代码随想录算法训练营第二十一天 | 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
思路:由于存在父节点不在范围内,而子树在范围内的情况,所以在处理上不能简单的判断大小。应该递归得到满足条件的子树,然后返还给上层节点。思路:其实整个过程可以看成是有序数组从右往左进行累加,所以整个递归过程应该是右中左的遍历顺序,然后将结果累加即可。思路:递归处理将中间值当作子树的根节点, 然后划分左右子树,依次进行构造子树。108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。669. 修剪二叉搜索树。
2024-11-19 12:46:59
240
原创 代码随想录算法训练营第二十天 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
思路:按照搜索树有序的特性进行递归找到该插入的位置,然后创建节点并接收即可。思路:直接按照普通二叉树找最近公共祖先,也是可以的。235. 二叉搜索树的最近公共祖先。701.二叉搜索树中的插入操作。450.删除二叉搜索树中的节点。也可以利用二叉搜索树的特性。
2024-11-18 23:03:09
247
原创 代码随想录算法训练营第十八天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
思路:由于二叉搜索树是有序的,按照中序遍历的情况就是从小到大排列,所以可以按照中序遍历来递归求相邻节点值的差值。思路:采用后续遍历的思想,先遍历左右子树,找到目标节点就返回节点。思路:基础思路还是将搜索树看成有序数组,来找众数。236. 二叉树的最近公共祖先。530.二叉搜索树的最小绝对差。501.二叉搜索树中的众数。
2024-11-17 16:32:05
159
原创 代码随想录算法训练营第十七天 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
思路:陷阱:不能简单比较中间节点 是否大于左节点、是否小于右节点;而是应该保证中间节点大于左子树中的每一个值,小于右子树中的每一个值;所以应当设置一个max,确保按照中序遍历时,每一次接收节点值都能够更新max,否则return false;思路:递归处理,如果当前节点的值等于目标值直接返回节点,否则就去递归左右子树。思路:类似根据中序后序构建二叉树,先确定根节点,划分左右子树,然后递归即可。思路:将两个树的结果覆盖在树1上,递归处理各个子树。700.二叉搜索树中的搜索。98.验证二叉搜索树。
2024-11-15 14:20:42
135
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人