309. 买卖股票的最佳时机含冷冻期

给定一个整数数组prices,其中第 prices[i] 表示第 *i* 天的股票价格 。

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
if n < 2:
return 0

b = [-prices[0]] * n # 记录每天的买入最大利润
s = [0] * n # 记录每天的卖出最大利润
c = 0 # 记录每天的冷却期最大利润

for i in range(1, n):
b[i] = max(b[i-1], c - prices[i]) # 更新买入最大利润
s[i] = max(s[i-1], b[i-1] + prices[i]) # 更新卖出最大利润
c = max(c, s[i-1]) # 更新冷却期最大利润

return max(c, s[n-1])

代码放着。如何靠一个冷却器c来实现冷却?卖出最大利润需要等待一个回合进入c,实际上就是模拟了等待冷却。在等待的时候c还是原来的c。

bgm