股票买卖2

· · 个人记录

1.定义状态

定义 f(i, s) 表示第 i 天结束后的最大利润,其中 s 表示是否持有股票:

s = 0 表示当天不持有股票

s = 1 表示当天持有股票

2.分解子问题

如果当天不持有股票:

f(i, 0) = max(f(i-1, 0), f(i-1, 1) + p[i])

如果当天持有股票:

f(i, 1) = max(f(i-1, 1), f(i-1, 0) - prices[i])

3.边界状态

f(0, 0) = 0

f(0, 1) = -p[0]

4.计算顺序

从 i = 1 开始到 n-1 计算每个 f(i, 0) 和 f(i, 1),更新状态

5.答案

最终的最大利润为 f(n-1, 0),因为最后一天不持有股票的利润肯定大于持有股票的利润

6.效率

时间复杂度:o(n) 空间复杂度:o(n)