0
点赞
收藏
分享

微信扫一扫

LeetCode——买卖股票的时机 II(动态规划)

young_d807 2022-02-28 阅读 32

介绍

题目描述

image.png

解题思路

  • dp[i][0]:表示的是第i天,手上没有股票获取的最大收益,也就是说赚的钱数。

  • dp[i][1]:表示的是第i天,手上有股票获取的最大收益。

  • dp[i][0]的可能性:

    • 第i-1天手里也没有股票:dp[i-1][0]
    • 第i-1天手里有股票,但是今天卖了:dp[i-1][1] + prices[i]
  • dp[i][1]的可能性:

    • 前一天也有股票,并保持到今天:dp[i-1][1]
    • 前一天没有股票,今天买入了:dp[i-1][0] - prices[i]

AC代码实现

var maxProfit = function(prices) {
  // 动态规划是解决买卖股票的最佳时机的核心技巧
  // 首先构造一个二维数组dp
  const dp = new Array(prices.length).fill([0,0]);

  // 初始化
  dp[0][0] = 0;
  dp[0][1] = -prices[0];

  // 处理一般情况
  for (let i = 1; i < dp.length; i++) {
    dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] + prices[i]);
    dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);
  }

  return dp[prices.length-1][0];
};

买卖股票的最佳时机I和买卖股票的最佳时机II的区别在哪里?

dp[i][1] = Math.max(- prices[i], dp[i - 1][1]);
dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);

总结

举报

相关推荐

0 条评论