LeetCode 题解:123. 买卖股票的最佳时机 III,动态规划,JavaScript,详细注释
原题链接:123. 买卖股票的最佳时机 III
解题思路:
截至第
i
天,当前已经交易过2
次,每次交易都可以买(支出prices[i]
)或卖(收入prices[i]
),因此可以用长度为4
的dp
数组递推。每种交易,都要在之前交易的基础上进行,例如只有买入后,才可以卖出。因此
4
种状态转移方程为:
- 0~i
天,只买入 1
次的最优状态,dp[0] = Math.max(dp[0], -prices[i]);
,第一次交易没有前置状态。
- 0~i
天,买入 1
次后,卖出的最优状态,dp[1] = Math.max(dp[1], dp[0] + prices[i]);
。
- 0~i
天,卖出 1
次后,在买入 1
次的最优状态,dp[2] = Math.max(dp[2], dp[1] - prices[i]);
。
- 0~i
天,买入 2
次,卖出 1
次后,在卖出 1
次的最优状态,dp[3] = Math.max(dp[3], dp[2] + prices[i]);
。
卖出
2
次获得的利润,一定比1
次多,因此最大利润就在dp[3]
。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/ab66bb18ceaaf4bd1b27c1e39】。文章转载请联系作者。
评论