From 9a2ca76d995ed9fc0cb89925ff7acdc63384ea0c Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Fri, 24 Dec 2021 09:53:13 +0800 Subject: [PATCH 01/13] =?UTF-8?q?0123.=E4=B9=B0=E5=8D=96=E8=82=A1=E7=A5=A8?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BAIII=EF=BC=9A?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0123.买卖股票的最佳时机III.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/problems/0123.买卖股票的最佳时机III.md b/problems/0123.买卖股票的最佳时机III.md index 4a8df2b9..fc81c3e9 100644 --- a/problems/0123.买卖股票的最佳时机III.md +++ b/problems/0123.买卖股票的最佳时机III.md @@ -51,6 +51,7 @@ 1. 确定dp数组以及下标的含义 一天一共就有五个状态, + 0. 没有操作 1. 第一次买入 2. 第一次卖出 @@ -82,6 +83,7 @@ dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天 同理可推出剩下状态部分: dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]); + dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]); From bd06d11aca72b02f476758d454ab600d0cf0f5b0 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Fri, 24 Dec 2021 10:09:14 +0800 Subject: [PATCH 02/13] =?UTF-8?q?0188.=E4=B9=B0=E5=8D=96=E8=82=A1=E7=A5=A8?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BAIV=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A8=E8=A7=84=E4=BA=94=E9=83=A8=E6=9B=B2?= =?UTF-8?q?=E6=AD=A5=E9=AA=A42=E7=9A=84=E9=80=92=E6=8E=A8=E5=85=AC?= =?UTF-8?q?=E5=BC=8F=E9=94=99=E8=AF=AF=20=E5=92=8C=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0188.买卖股票的最佳时机IV.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/problems/0188.买卖股票的最佳时机IV.md b/problems/0188.买卖股票的最佳时机IV.md index 49e5342b..7db75f06 100644 --- a/problems/0188.买卖股票的最佳时机IV.md +++ b/problems/0188.买卖股票的最佳时机IV.md @@ -58,7 +58,7 @@ j的状态表示为: 所以二维dp数组的C++定义为: -``` +```CPP vector> dp(prices.size(), vector(2 * k + 1, 0)); ``` @@ -71,14 +71,14 @@ vector> dp(prices.size(), vector(2 * k + 1, 0)); * 操作一:第i天买入股票了,那么dp[i][1] = dp[i - 1][0] - prices[i] * 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1] -选最大的,所以 dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][0]); +选最大的,所以 dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1]); 同理dp[i][2]也有两个操作: * 操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i] * 操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2] -所以dp[i][2] = max(dp[i - 1][i] + prices[i], dp[i][2]) +所以dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2]) 同理可以类比剩下的状态,代码如下: @@ -89,7 +89,7 @@ for (int j = 0; j < 2 * k - 1; j += 2) { } ``` -**本题和[动态规划:123.买卖股票的最佳时机III](https://programmercarl.com/0123.买卖股票的最佳时机III.html)最大的区别就是这里要类比j为奇数是买,偶数是卖剩的状态**。 +**本题和[动态规划:123.买卖股票的最佳时机III](https://programmercarl.com/0123.买卖股票的最佳时机III.html)最大的区别就是这里要类比j为奇数是买,偶数是卖的状态**。 3. dp数组如何初始化 @@ -160,7 +160,7 @@ public: 当然有的解法是定义一个三维数组dp[i][j][k],第i天,第j次买卖,k表示买还是卖的状态,从定义上来讲是比较直观。 -但感觉三维数组操作起来有些麻烦,我是直接用二维数组来模拟三位数组的情况,代码看起来也清爽一些。 +但感觉三维数组操作起来有些麻烦,我是直接用二维数组来模拟三维数组的情况,代码看起来也清爽一些。 ## 其他语言版本 From 28f0a9fa8156554a31ab2b38706b2409a1b13667 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Fri, 24 Dec 2021 10:22:11 +0800 Subject: [PATCH 03/13] =?UTF-8?q?0309.=E6=9C=80=E4=BD=B3=E4=B9=B0=E5=8D=96?= =?UTF-8?q?=E8=82=A1=E7=A5=A8=E6=97=B6=E6=9C=BA=E5=90=AB=E5=86=B7=E5=86=BB?= =?UTF-8?q?=E6=9C=9F=EF=BC=9A=E5=88=A0=E9=99=A4=E9=87=8D=E5=A4=8D=E5=8A=9B?= =?UTF-8?q?=E6=89=A3=E9=A2=98=E7=9B=AE=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0309.最佳买卖股票时机含冷冻期.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/problems/0309.最佳买卖股票时机含冷冻期.md b/problems/0309.最佳买卖股票时机含冷冻期.md index 82555f80..dd86b2ac 100644 --- a/problems/0309.最佳买卖股票时机含冷冻期.md +++ b/problems/0309.最佳买卖股票时机含冷冻期.md @@ -8,8 +8,6 @@ [力扣题目链接](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/) -[https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/) - 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): From 65732b0cd160dfeb8ba6f2bd0b8d6e58a226569c Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Fri, 24 Dec 2021 10:43:04 +0800 Subject: [PATCH 04/13] =?UTF-8?q?0309.=E6=9C=80=E4=BD=B3=E4=B9=B0=E5=8D=96?= =?UTF-8?q?=E8=82=A1=E7=A5=A8=E6=97=B6=E6=9C=BA=E5=90=AB=E5=86=B7=E5=86=BB?= =?UTF-8?q?=E6=9C=9F=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0309.最佳买卖股票时机含冷冻期.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problems/0309.最佳买卖股票时机含冷冻期.md b/problems/0309.最佳买卖股票时机含冷冻期.md index dd86b2ac..ecc3f1a6 100644 --- a/problems/0309.最佳买卖股票时机含冷冻期.md +++ b/problems/0309.最佳买卖股票时机含冷冻期.md @@ -88,7 +88,7 @@ dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]); * 操作一:昨天卖出了股票(状态三) -p[i][3] = dp[i - 1][2]; +dp[i][3] = dp[i - 1][2]; 综上分析,递推代码如下: @@ -122,7 +122,7 @@ dp[i][3] = dp[i - 1][2]; ![309.最佳买卖股票时机含冷冻期](https://img-blog.csdnimg.cn/2021032317451040.png) -最后结果去是 状态二,状态三,和状态四的最大值,不少同学会把状态四忘了,状态四是冷冻期,最后一天如果是冷冻期也可能是最大值。 +最后结果是取 状态二,状态三,和状态四的最大值,不少同学会把状态四忘了,状态四是冷冻期,最后一天如果是冷冻期也可能是最大值。 代码如下: From 6fddb03a38c7a6eb39ff7a0b2eb3df84c5f010de Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Fri, 24 Dec 2021 12:11:01 +0800 Subject: [PATCH 05/13] =?UTF-8?q?20210304=E5=8A=A8=E8=A7=84=E5=91=A8?= =?UTF-8?q?=E6=9C=AB=E6=80=BB=E7=BB=93=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=91=A8?= =?UTF-8?q?=E5=9B=9B=E5=8A=A8=E8=A7=84=E4=BA=94=E9=83=A8=E6=9B=B2=E6=AD=A5?= =?UTF-8?q?=E9=AA=A41=E4=B8=ADj=E7=9A=84=E7=8A=B6=E6=80=81=EF=BC=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E7=AC=94=E8=AF=AF=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../周总结/20210304动规周末总结.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/problems/周总结/20210304动规周末总结.md b/problems/周总结/20210304动规周末总结.md index dad9884d..c912b92d 100644 --- a/problems/周总结/20210304动规周末总结.md +++ b/problems/周总结/20210304动规周末总结.md @@ -3,11 +3,11 @@ ## 周一 -[动态规划:买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II(动态规划).html)中股票可以买买多了次! +[动态规划:买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II(动态规划).html)中股票可以买卖多次了! 这也是和[121. 买卖股票的最佳时机](https://programmercarl.com/0121.买卖股票的最佳时机.html)的唯一区别(注意只有一只股票,所以再次购买前要出售掉之前的股票) -重点在于递推公式公式的不同。 +重点在于递推公式的不同。 在回顾一下dp数组的含义: @@ -40,6 +40,7 @@ dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); 1. 确定dp数组以及下标的含义 一天一共就有五个状态, + 0. 没有操作 1. 第一次买入 2. 第一次卖出 @@ -117,7 +118,7 @@ for (int j = 0; j < 2 * k - 1; j += 2) { } ``` -**本题和[动态规划:123.买卖股票的最佳时机III](https://programmercarl.com/0123.买卖股票的最佳时机III.html)最大的区别就是这里要类比j为奇数是买,偶数是卖剩的状态**。 +**本题和[动态规划:123.买卖股票的最佳时机III](https://programmercarl.com/0123.买卖股票的最佳时机III.html)最大的区别就是这里要类比j为奇数是买,偶数是卖的状态**。 3. dp数组如何初始化 @@ -131,7 +132,7 @@ for (int j = 1; j < 2 * k; j += 2) { } ``` -**在初始化的地方同样要类比j为偶数是买、奇数是卖的状态**。 +**在初始化的地方同样要类比j为奇数是买、偶数是卖的状态**。 4. 确定遍历顺序 @@ -162,9 +163,9 @@ for (int j = 1; j < 2 * k; j += 2) { j的状态为: -* 1:持有股票后的最多现金 -* 2:不持有股票(能购买)的最多现金 -* 3:不持有股票(冷冻期)的最多现金 +* 0:持有股票后的最多现金 +* 1:不持有股票(能购买)的最多现金 +* 2:不持有股票(冷冻期)的最多现金 2. 确定递推公式 @@ -179,7 +180,7 @@ dp[i][2] = dp[i - 1][0] + prices[i]; 可以统一都初始为0了。 代码如下: -``` +```CPP vector> dp(n, vector(3, 0)); ``` From fab5c0235409de2eb62cf1736cc1560031b21d86 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Sat, 25 Dec 2021 09:45:01 +0800 Subject: [PATCH 06/13] =?UTF-8?q?0309.=E6=9C=80=E4=BD=B3=E4=B9=B0=E5=8D=96?= =?UTF-8?q?=E8=82=A1=E7=A5=A8=E6=97=B6=E6=9C=BA=E5=90=AB=E5=86=B7=E5=86=BB?= =?UTF-8?q?=E6=9C=9F=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0309.最佳买卖股票时机含冷冻期.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0309.最佳买卖股票时机含冷冻期.md b/problems/0309.最佳买卖股票时机含冷冻期.md index ecc3f1a6..18c940d4 100644 --- a/problems/0309.最佳买卖股票时机含冷冻期.md +++ b/problems/0309.最佳买卖股票时机含冷冻期.md @@ -103,7 +103,7 @@ dp[i][3] = dp[i - 1][2]; 这里主要讨论一下第0天如何初始化。 -如果是持有股票状态(状态一)那么:dp[0][0] = -prices[0],买入股票所省现金为负数。 +如果是持有股票状态(状态一)那么:dp[0][0] = -prices[0],买入股票所剩现金为负数。 保持卖出股票状态(状态二),第0天没有卖出dp[0][1]初始化为0就行, From e85e9e72755af16f2e47eb8f2e8cade5fb96599d Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Sat, 25 Dec 2021 10:06:17 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=92-?= =?UTF-8?q?=E8=82=A1=E7=A5=A8=E9=97=AE=E9=A2=98=E6=80=BB=E7=BB=93=E7=AF=87?= =?UTF-8?q?=EF=BC=9A=E4=BF=AE=E6=94=B9=E4=B9=B0=E5=8D=96=E8=82=A1=E7=A5=A8?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BAIV=E7=9A=84?= =?UTF-8?q?=E5=8A=A8=E8=A7=84=E4=BA=94=E9=83=A8=E6=9B=B2=E6=AD=A5=E9=AA=A4?= =?UTF-8?q?2=E9=80=92=E6=8E=A8=E5=85=AC=E5=BC=8F=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=8E=92=E7=89=88=EF=BC=8C=E7=AC=94?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/动态规划-股票问题总结篇.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/problems/动态规划-股票问题总结篇.md b/problems/动态规划-股票问题总结篇.md index 86b4f239..e1fb477b 100644 --- a/problems/动态规划-股票问题总结篇.md +++ b/problems/动态规划-股票问题总结篇.md @@ -173,6 +173,7 @@ public: 【动态规划】 一天一共就有五个状态, + 0. 没有操作 1. 第一次买入 2. 第一次卖出 @@ -199,6 +200,7 @@ dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]); 同理可推出剩下状态部分: dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]); + dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]); 代码如下: @@ -279,14 +281,14 @@ j的状态表示为: * 操作一:第i天买入股票了,那么dp[i][1] = dp[i - 1][0] - prices[i] * 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1] -dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][0]); +dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1]); 同理dp[i][2]也有两个操作: * 操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i] * 操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2] -dp[i][2] = max(dp[i - 1][i] + prices[i], dp[i][2]) +dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2]) 同理可以类比剩下的状态,代码如下: @@ -320,7 +322,7 @@ public: }; ``` -当然有的解法是定义一个三维数组dp[i][j][k],第i天,第j次买卖,k表示买还是卖的状态,从定义上来讲是比较直观。但感觉三维数组操作起来有些麻烦,直接用二维数组来模拟三位数组的情况,代码看起来也清爽一些。 +当然有的解法是定义一个三维数组dp[i][j][k],第i天,第j次买卖,k表示买还是卖的状态,从定义上来讲是比较直观。但感觉三维数组操作起来有些麻烦,直接用二维数组来模拟三维数组的情况,代码看起来也清爽一些。 ## 最佳买卖股票时机含冷冻期 @@ -462,7 +464,7 @@ public: 至此,股票系列正式剧终,全部讲解完毕! -从买买一次到买卖多次,从最多买卖两次到最多买卖k次,从冷冻期再到手续费,最后再来一个股票大总结,可以说对股票系列完美收官了。 +从买卖一次到买卖多次,从最多买卖两次到最多买卖k次,从冷冻期再到手续费,最后再来一个股票大总结,可以说对股票系列完美收官了。 「代码随想录」值得推荐给身边每一位学习算法的朋友同学们,关注后都会发现相见恨晚! From eb2b5e756a3b0e2d92ee1bb0a0740ae9ccb9c64a Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Mon, 27 Dec 2021 09:53:51 +0800 Subject: [PATCH 08/13] =?UTF-8?q?0053.=E6=9C=80=E5=A4=A7=E5=AD=90=E5=BA=8F?= =?UTF-8?q?=E5=92=8C=EF=BC=88=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=92=EF=BC=89?= =?UTF-8?q?=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0053.最大子序和(动态规划).md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0053.最大子序和(动态规划).md b/problems/0053.最大子序和(动态规划).md index 2e9d2fd5..37de9bbe 100644 --- a/problems/0053.最大子序和(动态规划).md +++ b/problems/0053.最大子序和(动态规划).md @@ -42,7 +42,7 @@ dp[i]只有两个方向可以推出来: dp[0]应该是多少呢? -更具dp[i]的定义,很明显dp[0]因为为nums[0]即dp[0] = nums[0]。 +根据dp[i]的定义,很明显dp[0]应为nums[0]即dp[0] = nums[0]。 4. 确定遍历顺序 From e1b489d34caed9d9552f1585defbc6cece269215 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Mon, 27 Dec 2021 09:54:39 +0800 Subject: [PATCH 09/13] =?UTF-8?q?0300.=E6=9C=80=E9=95=BF=E4=B8=8A=E5=8D=87?= =?UTF-8?q?=E5=AD=90=E5=BA=8F=E5=88=97=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0300.最长上升子序列.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0300.最长上升子序列.md b/problems/0300.最长上升子序列.md index 9c1c07f6..27d5b122 100644 --- a/problems/0300.最长上升子序列.md +++ b/problems/0300.最长上升子序列.md @@ -55,7 +55,7 @@ dp[i] 是有0到i-1各个位置的最长升序子序列 推导而来,那么遍历i一定是从前向后遍历。 -j其实就是0到i-1,遍历i的循环里外层,遍历j则在内层,代码如下: +j其实就是0到i-1,遍历i的循环在外层,遍历j则在内层,代码如下: ```CPP for (int i = 1; i < nums.size(); i++) { From 02fe7d6e79d8c9c644e842dbc12a113bbfce0809 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Mon, 27 Dec 2021 10:07:19 +0800 Subject: [PATCH 10/13] =?UTF-8?q?0392.=E5=88=A4=E6=96=AD=E5=AD=90=E5=BA=8F?= =?UTF-8?q?=E5=88=97=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0392.判断子序列.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problems/0392.判断子序列.md b/problems/0392.判断子序列.md index ecde2448..d64e1fd0 100644 --- a/problems/0392.判断子序列.md +++ b/problems/0392.判断子序列.md @@ -81,13 +81,13 @@ if (s[i - 1] != t[j - 1]),此时相当于t要删除元素,t如果把当前 **其实这里只初始化dp[i][0]就够了,但一起初始化也方便,所以就一起操作了**,代码如下: -``` +```CPP vector> dp(s.size() + 1, vector(t.size() + 1, 0)); ``` 4. 确定遍历顺序 -同理从从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],那么遍历顺序也应该是从上到下,从左到右 +同理从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1],那么遍历顺序也应该是从上到下,从左到右 如图所示: From 0fad1f60e1e2c408677ed75ce86618af539b598f Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Mon, 27 Dec 2021 11:22:00 +0800 Subject: [PATCH 11/13] =?UTF-8?q?0583.=E4=B8=A4=E4=B8=AA=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E7=9A=84=E5=88=A0=E9=99=A4=E6=93=8D=E4=BD=9C=EF=BC=9A?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0583.两个字符串的删除操作.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0583.两个字符串的删除操作.md b/problems/0583.两个字符串的删除操作.md index a04907d4..d2f7d84b 100644 --- a/problems/0583.两个字符串的删除操作.md +++ b/problems/0583.两个字符串的删除操作.md @@ -18,7 +18,7 @@ ## 思路 -本题和[动态规划:115.不同的子序列](https://programmercarl.com/0115.不同的子序列.html)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变的。 +本题和[动态规划:115.不同的子序列](https://programmercarl.com/0115.不同的子序列.html)相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。 这次是两个字符串可以相互删了,这种题目也知道用动态规划的思路来解,动规五部曲,分析如下: From 94d1320fff38c56eb7dd2028fab9e2e2d9edb4f8 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Mon, 27 Dec 2021 11:28:27 +0800 Subject: [PATCH 12/13] =?UTF-8?q?0714.=E4=B9=B0=E5=8D=96=E8=82=A1=E7=A5=A8?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BA=E5=90=AB=E6=89=8B?= =?UTF-8?q?=E7=BB=AD=E8=B4=B9=EF=BC=88=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=92?= =?UTF-8?q?=EF=BC=89=EF=BC=9A=E4=BF=AE=E6=94=B9=E9=93=BE=E6=8E=A5=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...卖股票的最佳时机含手续费(动态规划).md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md index 1f5218e9..b385d710 100644 --- a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md +++ b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md @@ -43,7 +43,7 @@ 那么我们再来看看是使用动规的方法如何解题。 -相对于[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 +相对于[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II(动态规划).html),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。 唯一差别在于递推公式部分,所以本篇也就不按照动规五部曲详细讲解了,主要讲解一下递推公式部分。 @@ -67,7 +67,7 @@ dp[i][1] 表示第i天不持有股票所得最多现金 所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee); -**本题和[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II.html)的区别就是这里需要多一个减去手续费的操作**。 +**本题和[动态规划:122.买卖股票的最佳时机II](https://programmercarl.com/0122.买卖股票的最佳时机II(动态规划).html)的区别就是这里需要多一个减去手续费的操作**。 以上分析完毕,C++代码如下: From 09f9682792f2d6adb916da6e06ff6ec7d3cea8b5 Mon Sep 17 00:00:00 2001 From: qyg <1600314850@qq.com> Date: Tue, 28 Dec 2021 10:02:16 +0800 Subject: [PATCH 13/13] =?UTF-8?q?0300.=E6=9C=80=E9=95=BF=E4=B8=8A=E5=8D=87?= =?UTF-8?q?=E5=AD=90=E5=BA=8F=E5=88=97=EF=BC=9A=E8=B0=83=E6=95=B4=E7=AC=94?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0300.最长上升子序列.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0300.最长上升子序列.md b/problems/0300.最长上升子序列.md index 27d5b122..ed61a30e 100644 --- a/problems/0300.最长上升子序列.md +++ b/problems/0300.最长上升子序列.md @@ -49,7 +49,7 @@ 3. dp[i]的初始化 -每一个i,对应的dp[i](即最长上升子序列)起始大小至少都是是1. +每一个i,对应的dp[i](即最长上升子序列)起始大小至少都是1. 4. 确定遍历顺序