一、题目描述
二、思路分析
本题跟前面两次的区别,限定了最多只能买两次,且同一天不能多次交易。
如果产生了第二笔交易,肯定是在第一笔的基础上,我们可以用 res[0],res[1],res[2],res[3]表示第一次买,第一次卖,第二次买,第二次卖,得到以下的状态转移方程:
res[3]= res[2] + 本次卖出价
res[2]= res[1] - 本次买入价
res[1]= res[0] + 本次卖出价
res[0]= - 本次买入价
var maxProfit = function (prices) {
// 注意初始状态,第一次和第三次都是买入,把一和三初始化为-Infinity;
const res =[-Infinity, 0, -Infinity, 0]
for (let i = 0; i < prices.length; ++i) {
res[3] = Math.max(res[3], res[2] + prices[i]);
res[2] = Math.max(res[2], res[1] - prices[i]);
res[1] = Math.max(res[1], res[0] + prices[i]);
res[0] = Math.max(res[0], -prices[i]);
}
return Math.max(res[1], res[3]);
};
参考:zhuanlan.zhihu.com/p/76039990
三、总结
本题比较难的是理解思路,整理出状态转移方程。