- 博客(435)
- 收藏
- 关注
原创 力扣 LeetCode 84. 柱状图中最大的矩形(Day25:单调栈)
注意,需要在数组前后都补一个0,否则会出现无法计算的情况(单调递增和单调递减数组的情况,走不到计算那一步,或者走到该计算时,需要三个元素但只有两个元素)本质是求左边第一个比它矮的和右边第一个比它矮的,求出一个面积,然后在这些面积里取最大的。
2025-02-03 21:39:23
159
原创 力扣 LeetCode 42. 接雨水(Day25:单调栈)
栈顶元素的下一个元素(从栈顶往下第二个元素)为左边第一个更大的元素。使用sum累加得到的凹槽长x宽即可。单调栈找出右边第一个更大的元素。当前元素为右边第一个更大的元素。
2025-02-03 20:46:57
127
原创 力扣 LeetCode 503. 下一个更大元素II(Day25:单调栈)
那么我们可以双倍定义数组大小,并且取模,走后半部分时可以续接上,保证在环内。单调栈找下一个更大的数,并且有环。
2025-02-03 20:12:29
194
原创 力扣 LeetCode 739. 每日温度(Day25:单调栈)
这里是求右边第一个比它大的元素的下标之间的差值。单调栈的作用是存放之前遍历过的元素。
2025-02-03 19:13:46
275
原创 力扣 LeetCode 516. 最长回文子序列(Day24:动态规划)
【代码】力扣 LeetCode 516. 最长回文子序列(Day24:动态规划)
2025-02-02 17:43:33
223
原创 力扣 LeetCode 647. 回文子串(Day24:动态规划)
注意,Arrays.fill(dp[i], false)用于一维数组,所以需要添加一个循环帮助赋值。判断是否为回文串的方法:在两侧相同时看内层是否为true。dp数组的含义为区间[ i , j ]的回文子串的个数。
2025-02-02 17:32:46
214
原创 力扣 LeetCode 1143. 最长公共子序列(Day23:动态规划)
dp[ i ] [ j ]表示 i - 1 和 j - 1 结尾的最长公共子序列的长度。
2025-01-26 16:26:22
156
原创 力扣 LeetCode 718. 最长重复子数组(Day23:动态规划)
dp[ i ] [ j ]表示nums1[ i - 1 ]和nums2[ j - 1 ]结尾的最长重复序列的长度。注意是i - 1和j - 1,简化初始化。
2025-01-26 16:05:27
209
原创 力扣 LeetCode 674. 最长连续递增序列(Day23:动态规划)
dp[ i ]表示以nums[ i ]结尾的最长连续递增序列的长度,但最长的子序列长度不一定是以nums[ i ]结尾的,所以要用一个max记录最大值。注意是连续,所以会比较和前一个元素的大小,i 和 i - 1进行比较。
2025-01-26 12:10:37
279
原创 力扣 LeetCode 300. 最长递增子序列(Day23:动态规划)
dp[ i ]表示以nums[ i ]结尾的最长递增子序列的长度,但最长的子序列长度不一定是以nums[ i ]结尾的,所以要用一个max记录最大值。
2025-01-26 12:00:56
126
原创 力扣 LeetCode 309. 买卖股票的最佳时机含冷冻期(Day22:动态规划)
对持有股票的状态进行拆分,拆分成持有和当天买入后持有,以区别冷冻期。1:不持有当天不卖出。注意:1和2是拆分的。
2025-01-25 13:54:11
161
原创 力扣 LeetCode 188. 买卖股票的最佳时机IV(Day22:动态规划)
与买卖股票III类似,这里为k,需要进行递推,初始化也有合理赋值。
2025-01-25 12:55:34
172
原创 力扣 LeetCode 123. 买卖股票的最佳时机III(Day22:动态规划)
【代码】力扣 LeetCode 123. 买卖股票的最佳时机III(Day22:动态规划)
2025-01-25 11:45:52
204
原创 力扣 LeetCode 121. 买卖股票的最佳时机(Day22:动态规划)
二维数组0表示持有,1表示不持有(dp表示到第 i 天持有或不持有的最大金额)不持有可能是前一个状态就不持有,或者当前状态才卖出。持有可能是前一个状态就持有,或者当前状态才持有。
2025-01-25 11:04:34
142
原创 力扣 LeetCode 337. 打家劫舍III(Day21:动态规划)
res[0]不偷当前节点,那么左右子节点可以偷,取能偷和不能偷的最大值。res[1]要偷当前节点,那么左右子节点不能偷。res[0]代表不偷,res[1]代表偷。
2025-01-24 15:29:02
180
原创 力扣 LeetCode 198. 打家劫舍II(Day21:动态规划)
转换为两种情况,考虑首元素不考虑尾元素,考虑尾元素,不考虑首元素,作为参数传递即可。与打家劫舍的区别在于打家劫舍是线性的,这里是环。其余部分与打家劫舍一致。
2025-01-24 14:56:24
265
原创 力扣 LeetCode 198. 打家劫舍(Day21:动态规划)
考虑最后一间偷还是不偷,不偷则为dp[ i - 1 ],偷则为dp[ i - 2 ] + nums[ i ]
2025-01-24 14:33:22
167
原创 力扣 LeetCode 139. 单词拆分(Day21:动态规划)
dp[ i ]为true的同时,如果 i 到 j 的字符串在字典中,那么区间[ i , j ] 就实现了判断,dp[ j ]此时为true。dp[ j ]表示长度为 j 的字符串为true的话,则在字典中找得到单词。完全背包问题,字符串长度为背包容量,字典中的单词为物品,对背包进行填充。此题为排列问题,先背包,再物品。
2025-01-24 12:51:07
144
原创 力扣 LeetCode 279. 完全平方数(Day20:动态规划)
因为是最小值,所以初始化为较大的数防止覆盖。完全背包问题,可以无限次使用同一个物品。因为要的是个数,所以用+1。
2025-01-23 12:54:42
286
原创 力扣 LeetCode 322. 零钱兑换(Day20:动态规划)
因为是最小值,所以初始化为较大的数防止覆盖。完全背包问题,可以无限次使用同一个物品。因为要的是个数,所以用+1。
2025-01-23 12:33:09
164
原创 力扣 LeetCode 518. 零钱兑换II(Day20:动态规划)
(背包容量固定,尝试内层的值,1,2和2,1都有)需要注意两层for循环内外层分别是什么,注意顺序。外层物品,内层背包:组合问题。外层背包,内层物品:排列问题。本题为完全背包的组合问题。
2025-01-23 11:59:48
269
原创 力扣 LeetCode 474. 一和零(Day20:动态规划)
dp[ i ][ j ]表示有 i 个0, j 个1时,最大子集的个数。01背包,外层物品,内层背包(此时内层考虑两个维度,m个0和n个1)
2025-01-23 11:34:37
137
原创 力扣 LeetCode 494. 目标和(Day19:动态规划)
拆分为left和right两部分集合(left表示正,right表示负)推导出 left =(sum + target)/ 2。只需要知道有没有数字可以填满left即可。
2025-01-22 18:40:37
135
原创 力扣 LeetCode 1049. 最后一块石头的重量II(Day19:动态规划)
01背包问题,尽可能找到近似装满target容量的石堆,最后两个石堆相减。石堆1:sum - dp[target],石堆2:dp[target](因为是sum/2向下取整,所以石堆1一定大于等于石堆2)
2025-01-22 17:10:25
165
原创 力扣 LeetCode 96. 不同的二叉搜索树(Day19:动态规划)
由前面的节点数量的左右子树的排列乘积起来叠加的。注意什么是二叉搜索树(中序遍历单调递增)
2025-01-22 14:29:25
130
原创 力扣 LeetCode 63. 不同路径II(Day18:动态规划)
与不同路径的区别在于增加了障碍,需要对是否有障碍物进行条件判断。初始化赋值时也要判断是否有障碍物。
2025-01-21 12:02:22
108
原创 力扣 LeetCode 62. 不同路径(Day18:动态规划)
只能从上或从左侧来 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];所以需要为第一行和第一列进行初始化赋值。
2025-01-21 11:49:52
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人