- 博客(127)
- 收藏
- 关注
原创 代码随想录算法训练营day74 | 94. 城市间货物运输 I、95. 城市间货物运输 II、96. 城市间货物运输 III
本次题目全部来自卡码网。
2024-07-07 11:37:11
433
1
原创 代码随想录算法训练营day71 | 53. 寻宝
在节点数量固定的情况下,图中的边越少,Kruskal 需要遍历的边也就越少。而 prim 算法是对节点进行操作的,节点数量越少,prim算法效率就越优。所以在 稀疏图中,用Kruskal更优。在稠密图中,用prim算法更优。复杂度Prim 算法 时间复杂度为 O(n^2),其中 n 为节点数量,它的运行效率和图中边树无关,适用稠密图。Kruskal算法 时间复杂度 为 nlogn,其中n 为边的数量,适用稀疏图。
2024-07-02 16:54:50
282
原创 代码随想录算法训练营day64 | 98. 所有可达路径
整体上一般分为 有向图 和 无向图。加权有向图,就是图中边是有权值的,加权无向图也是同理。
2024-06-24 15:58:08
537
原创 代码随想录算法训练营day63 | 42. 接雨水、84.柱状图中最大的矩形
遍历每根柱子(第一个和最后一个不需要遍历,因为不可能存住水),找到当前柱子的左边最高柱子lHeight,右边最高柱子rHeight,当前柱子能存的水为min(min(lHeight, rHeight) - 当前柱子的高度, 0)会超时。
2024-06-23 11:12:09
698
原创 代码随想录算法训练营day62 | 739. 每日温度、496.下一个更大元素 I 、503.下一个更大元素II
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。使用单调栈主要有三个判断条件。
2024-06-18 10:46:53
357
原创 代码随想录算法训练营day60 | 647. 回文子串、516.最长回文子序列
布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。
2024-06-17 14:43:50
985
原创 代码随想录算法训练营day59 | 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]
2024-06-17 13:31:14
815
原创 代码随想录算法训练营day58 | 392.判断子序列
dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]
2024-06-16 10:40:42
401
原创 代码随想录算法训练营day57 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]
2024-06-16 10:07:33
554
原创 代码随想录算法训练营day56 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度,一定要是以nums[i]为结尾。
2024-06-16 08:28:19
486
原创 代码随想录算法训练营day53 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]。不持有股票状态,这里就有两种卖出股票状态冷冻期为状态四。
2024-06-14 16:56:16
496
原创 代码随想录算法训练营day52 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
五个状态dp[i][j]表示第i天状态j所剩最大现金。
2024-06-14 16:48:41
459
原创 代码随想录算法训练营day51 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
本题暴力和贪心都能解,贪心的代码值得好好学习使用动态规划。
2024-06-11 22:40:26
375
原创 代码随想录算法训练营day50 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
如果不偷当前节点,那么左右孩子就可以偷,至于到底偷不偷一定是选一个最大的,所以:val2 = max(left[0], left[1]) + max(right[0], right[1])忽略最后一个房间,其它房间选择最大值;这两种情况可以避免第一个房间和最后一个房间同时被选中,满足条件。如果是偷当前节点,那么左右孩子就不能偷,val1 = cur->val + left[0] + right[0]即:{不偷当前节点得到的最大金钱,偷当前节点得到的最大金钱}递归三部曲和动态规划五部曲融合。
2024-06-11 21:50:06
405
原创 代码随想录算法训练营day48 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
本题和377. 组合总和 Ⅳ一样。求的是排列,因此背包重量为外层循环,物品为内层循环。
2024-06-09 10:50:12
327
原创 代码随想录算法训练营day46 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
完全背包相对于01背包来说物品有无限个代码的不同主要体现在遍历顺序上, 完全背包的背包重量不需要倒序遍历,因为物品有无限个,可以被无限添加;并且因为背包重量正序遍历,后续的值依赖于前面的值,因此背包和物品的内外层遍历也没有特定顺序下面以物品外层循环,背包容量内层循环为例。
2024-06-09 06:10:28
348
原创 代码随想录算法训练营day45 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
本题将石头分为两堆,即背包重量为sum(stones) // 2不用加绝对值,因为sum(stones) - dp[-1] 是大于dp[-1]的。
2024-06-05 20:26:15
359
原创 代码随想录算法训练营day44 | 01背包问题 二维、01背包问题 一维、416. 分割等和子集
dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]
2024-06-05 20:01:20
1042
原创 代码随想录算法训练营day43 | 343. 整数拆分、96.不同的二叉搜索树
本题可以优化因为拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。例如 6 拆成 3 * 3, 10 拆成 3 * 3 * 4。100的话 也是拆成m个近似数组的子数 相乘才是最大的。只不过我们不知道m究竟是多少而已,但可以明确的是m一定大于等于2,既然m大于等于2,也就是 最差也应该是拆成两个相同的 可能是最大值。那么 k 遍历,只需要遍历到 n/2 就可以,后面就没有必要遍历了,一定不是最大值。
2024-05-31 16:22:35
344
原创 代码随想录算法训练营day41 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
理论基础理论基础动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的动态规划的解题步骤动态规划应该如何debug?找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!
2024-05-31 11:35:40
329
原创 代码随想录算法训练营day39 | 738.单调递增的数字、968.监控二叉树
暴力解法超时贪心解法:从后向前遍历,如果出现strNum[i - 1] > strNum[i]的情况(非单调递增),让strNum[i - 1]--,然后strNum[i]给为9。
2024-05-30 19:02:37
320
原创 代码随想录算法训练营day38 | 435. 无重叠区间、763.划分字母区间、56. 合并区间
按照左边界排序,直接求重叠区间按照右边界排序,求得是不重叠区间。
2024-05-29 13:39:21
381
原创 代码随想录算法训练营day37 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
排序的方式需要学习;列表插入元素的方式也需要学习;本题思路也比较巧妙,值得学习。
2024-05-28 17:13:53
324
原创 代码随想录算法训练营day35 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
完全想不出来贪心的解法,分解为每天的利润,所有正利润之和为最大利润。
2024-05-27 14:34:45
330
原创 代码随想录算法训练营day34 | 455.分发饼干、376. 摆动序列、53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。
2024-05-27 11:21:42
332
原创 代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II
未去重的代码本题是树结构的同一层剪枝但是本题不能排序,和之前的剪枝差别很大优化点:因为给定的数字范围是-100 <= nums[i] <= 100,因此set可以优化为数组。
2024-05-27 10:59:23
324
原创 代码随想录算法训练营day30 | 93.复原IP地址、78.子集、90.子集II
看了题解之后,可以把判断是否有效提出来成为一个函数,在path等于3的时候就直接得到最后一个数值进行判断。
2024-05-21 22:27:09
167
原创 代码随想录算法训练营day29 | 39. 组合总和、40.组合总和II、131.分割回文串
无重复元素,但是同一个数字可以被重复选取,因此在参数中startIndex在每次递归时不需要+1。但是要注意,为了不寻找之前已经找过的元素,startIndex需要加上,表示只会继续向前寻找剪枝其实就是将下一层的sum大于target的终止条件放到本层的for循环中。
2024-05-21 14:38:02
265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人