@@ -54,7 +54,7 @@ int maxProfit(vector<int>& prices) {
54
54
55
55
这 6 道题目是有共性的,我们只需要抽出来力扣第 188 题「买卖股票的最佳时机 IV」进行研究,因为这道题是最泛化的形式,其他的问题都是这个形式的简化,看下题目:
56
56
57
- 
57
+ <Problem slug="best-time-to-buy-and-sell-stock-iv" />
58
58
59
59
第一题是只进行一次交易,相当于 `k = 1`;第二题是不限交易次数,相当于 `k = +infinity`(正无穷);第三题是只进行 2 次交易,相当于 `k = 2`;剩下两道也是不限次数,但是加了交易「冷冻期」和「手续费」的额外条件,其实就是第二题的变种,都很容易处理。
60
60
@@ -181,7 +181,7 @@ dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])
181
181
182
182
** 第一题,先说力扣第 121 题「买卖股票的最佳时机」,相当于 `k = 1 ` 的情况** :
183
183
184
- 
184
+ < Problem slug= " best-time-to-buy-and-sell-stock " / >
185
185
186
186
直接套状态转移方程,根据 base case,可以做一些化简:
187
187
@@ -270,7 +270,7 @@ int maxProfit_k_1(int[] prices) {
270
270
271
271
** 第二题,看一下力扣第 122 题「买卖股票的最佳时机 II 」,也就是 `k` 为正无穷的情况** :
272
272
273
- 
273
+ < Problem slug= " best-time-to-buy-and-sell-stock-ii " / >
274
274
275
275
题目还专门强调可以在同一天出售,但我觉得这个条件纯属多余,如果当天买当天卖,那利润当然就是 0 ,这不是和没有进行交易是一样的吗?这道题的特点在于没有给出交易总数 `k` 的限制,也就相当于 `k` 为正无穷。
276
276
@@ -322,7 +322,7 @@ int maxProfit_k_inf(int[] prices) {
322
322
323
323
** 第三题,看力扣第 309 题「最佳买卖股票时机含冷冻期」,也就是 `k` 为正无穷,但含有交易冷冻期的情况** :
324
324
325
- 
325
+ < Problem slug= " best-time-to-buy-and-sell-stock-with-cooldown " / >
326
326
327
327
和上一道题一样的,只不过每次 `sell` 之后要等一天才能继续交易,只要把这个特点融入上一题的状态转移方程即可:
328
328
@@ -381,7 +381,7 @@ int maxProfit_with_cool(int[] prices) {
381
381
382
382
** 第四题,看力扣第 714 题「买卖股票的最佳时机含手续费」,也就是 `k` 为正无穷且考虑交易手续费的情况** :
383
383
384
- 
384
+ < Problem slug= " best-time-to-buy-and-sell-stock-with-transaction-fee " / >
385
385
386
386
每次交易要支付手续费,只要把手续费从利润中减去即可,改写方程:
387
387
@@ -435,7 +435,7 @@ int maxProfit_with_fee(int[] prices, int fee) {
435
435
436
436
** 第五题,看力扣第 123 题「买卖股票的最佳时机 III 」,也就是 `k = 2 ` 的情况** :
437
437
438
- 
438
+ < Problem slug= " best-time-to-buy-and-sell-stock-iii " / >
439
439
440
440
`k = 2 ` 和前面题目的情况稍微不同,因为上面的情况都和 `k` 的关系不太大:要么 `k` 是正无穷,状态转移和 `k` 没关系了;要么 `k = 1 ` ,跟 `k = 0 ` 这个 base case 挨得近,最后也没有存在感。
441
441
@@ -547,7 +547,7 @@ int maxProfit_k_2(int[] prices) {
547
547
548
548
** 第六题,看力扣第 188 题「买卖股票的最佳时机 IV 」,即 `k` 可以是题目给定的任何数的情况** :
549
549
550
- 
550
+ < Problem slug= " best-time-to-buy-and-sell-stock-iv " / >
551
551
552
552
有了上一题 `k = 2 ` 的铺垫,这题应该和上一题的第一个解法没啥区别,你把上一题的 `k = 2 ` 换成题目输入的 `k` 就行了。
553
553
0 commit comments