Skip to content

📚 4.买卖股票的最佳时机 II

💻 代码实现

typescript
/**
 * @url https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
 */

// 动态规划
// dp[i][0]表示第i天手上有股票的最大利润 dp[i][0] = dp[i-1][1]-nums[i] dp[i][0]
// dp[i][1]表示第i天手上没有股票的最大利润 dp[i][1] = dp[i-1][0]+nums[i] dp[i-1][1]
// function maxProfit(prices: number[]): number {
//     const dp = new Array(prices.length + 1).fill(0).map((_v) => new Array(2).fill(0))
//     dp[0][0] = -prices[0] // TODO:换了下标,这里的初始化还是需要改变
//     for (let i = 1; i <= prices.length; i++) {
//         dp[i][0] = Math.max(dp[i - 1][1] - prices[i - 1], dp[i - 1][0])
//         dp[i][1] = Math.max(dp[i - 1][0] + prices[i - 1], dp[i - 1][1])
//     }
//     console.table(dp)
//     return dp[prices.length][1]
// }
// console.log(maxProfit([7, 1, 5, 3, 6, 4]))
// 贪心算法
function maxProfit(prices: number[]): number {
  // 计算数组中的间隔
  const init = (arr: number[]) => {
    const temp: number[] = [];
    for (let i = 1; i < arr.length; i++) {
      temp.push(arr[i] - arr[i - 1]);
    }
    return temp;
  };
  const intervalArray = init(prices);
  return intervalArray.reduce((acc, cur) => {
    if (cur >= 0) {
      return acc + cur;
    }
    return acc;
  }, 0);
}

Released under the MIT License.