123. 买卖股票的最佳时机 III|刷题打卡

328 阅读1分钟

一、题目描述

二、思路分析

本题跟前面两次的区别,限定了最多只能买两次,且同一天不能多次交易。 如果产生了第二笔交易,肯定是在第一笔的基础上,我们可以用 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

三、总结

本题比较难的是理解思路,整理出状态转移方程。