股票买卖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)