【代码随想录】【单调栈】day60:柱状图中的最大矩形 接雨水 (opens new window)是找每个柱子左右两边第一个大于该柱子高度的柱子,而本题是找每个柱子左右两边第一个小于该柱子的柱子。接雨水(从栈顶到栈底是单调递增的):遇到比栈顶元素小的,加进去,遇到比栈顶元素大的元素,计算一下面积值。本题(从栈顶到栈底是递减的):遇到比栈顶元素大的,加进去,遇到比栈顶元素小的元素,计算一下面积值。
【代码随想录】【动态规划】day50:● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV 不限制交易次数的时候,每一次买入的状态都可以看做是相同的,都是dp[i][0],但是有交易限制的时候,每一次买入的状态都是不同的:dp[i][j] 定义为j为奇数的时候代表持有的状态,j为偶数代表不持有的状态k次交易,一共有k个买的状态和k个卖的状态,一共2k个状态。
【代码随想录】【动态规划】day51:● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 【代码】【代码随想录】【动态规划】day51:● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费。
【代码随想录】【回文子串】day57:● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇 【代码】【代码随想录】【回文子串】day57:● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇。
【代码随想录】【动态规划】day56:● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇 增加删除其实是一样的操作,在word1上增加相当于在word2上删除。替换就是在dp[i-1][j-1]的基础上+1。
【代码随想录】【单调栈】day58:每日温度和下一个最大元素 适用于寻找当前元素的右边或左边第一个大的或者第一个小的元素,计算那个元素和当前元素的距离如果是寻找大的元素,就构造递增的单调栈(从栈头到栈底)保证栈头是最小的。
【代码随想录】【动态规划】day56:● 392.判断子序列 ● 115.不同的子序列 相当于找最长公共子序列的问题,区别在于这里面只能在t的基础上找s,就是s不能删除元素,只有t能删除如果相等,直接在原有的基础上+1,如果不相等,就看t从0到前一个元素和s的最长公共序列。
【代码随想录】【动态规划】day53:1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划 【代码】【代码随想录】【动态规划】day53:1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划。
【代码随想录】【动态规划】day52:● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组 以索引i为结尾的数组的最长递增子序列如果和i之前的所有元素相比,nums[i]更大,那就在基础上加一一直维护dp[i]最大,max_result记录dp[i]
【代码随想录】day46:单词拆分,多重背包 1.把单词看成物品,字符串看成背包—>完全背包问题2.排列问题:因为物品之间的组成顺序很重要,所以需要考虑顺序。因为"apple" + “apple” + “pen” 或者 “pen” + “apple” + “apple” 是不可以的d[j]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词如果确定dp[i] 是true,且 [i, i] 这个区间的子串出现在字典里,那么dp[j]一定是true。。所以递推公式是 if([i,
【代码随想录】【动态规划】day45:● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数 思路:在1-m步中任意选取,组成target为n的所有组合数所以,该问题就变成了完全背包的排列问题。
【代码随想录】【动态规划】day43:● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零 与分割等和子集类似思路:尽量分割成两个sum值相近的数组1和2,求其中一个数组为sum(stone)//2时的一种情况dp[j]:容量(这里说容量更形象,其实就是重量)为j的背包,最多可以背最大重量为dp[j]