题目
代码:动态规划:O(n)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
n = len(prices)
f = [[0, 0, 0] for _ in range(n)]
# 第一天持有,只有可能是买入
f[0][0] = -prices[0]
# f[i][0]: 手上持有股票的最大收益
# f[i][1]: 手上不持有股票,本日卖出,累计最大收益
# f[i][2]: 手上不持有股票,本日不卖出,累计最大收益
for i in range(1, n):
# 今日持有:1.昨日持有;2.昨日不持有,今日买入
f[i][0] = max(f[i-1][0], f[i-1][2]-prices[i])
# 今日不持有,因为今日卖出:1.昨日持有,今日卖出
f[i][1] = f[i-1][0] + prices[i]
# 今日不持有,因为本身没有:1.昨日卖出了;2.昨日也没有
f[i][2] = max(f[i-1][1], f[i-1][2])
return max(f[n-1][1], f[n-1][2])