[123] 买卖股票的最佳时机 III

43 阅读1分钟

image.png

/*
 * @lc app=leetcode.cn id=123 lang=javascript
 *
 * [123] 买卖股票的最佳时机 III
 */

// @lc code=start
/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function (prices) {
  if (prices.length === 0) {
    return 0
  }
  // 创建一个二维数组,第一行第一列补0
  const dp = Array.from(Array(3), () => new Array(prices.length))
  for (let i = 0; i < prices.length; i++) {
    dp[0][i] = 0
  }
  for (let i = 0; i < 3; i++) {
    dp[i][0] = 0
  }
  // 将之前的取最大值到maxProfit,减少计算量
  for (let i = 1; i < 3; i++) {
    let maxProfit = -prices[0]
    for (let j = 1; j < prices.length; j++) {
      dp[i][j] = Math.max(dp[i][j - 1], prices[j] + maxProfit)
      maxProfit = Math.max(maxProfit, dp[i - 1][j] - prices[j])
    }
  }

  return dp[2][prices.length - 1]
}
// @lc code=end