介绍
题目描述
解题思路
-
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]);