动态规划,我们用两个变量还记录每天i的受益,一个记录当天结束后没有股票dp[i][0],一个记录当天结束后持有股票dp[i][1],每天的受益假设只跟前一天相关,如果当天结束后没有股票,有两种情况,一是前一天持有股票,今天卖掉了,那么受益是前一天加上今天的股票价格:dp[i-1][1]+prices[i],二十前一天 没有股票,那么受益跟前一天一样:dp[ip-1][0];如果当天结束后持有股票,也是两种情况,一种是前一天没有股票,今天买入,那么今天的受益是昨天的减去今天的股票价格:dp[i-1][0]-prices[i],第二种情况是前一天就持有股票,那么今天的受益跟前一天一样:dp[i-1][1]。通过这个动态方程计算每一天的值,我们初始化为dp[0][0]=0,dp[0][1]=-prices[1],结束时返回dp[n-1][0],因为今天的受益肯定是将股票全部抛出最大。
var maxProfit = function(prices) {
const n = prices.length;
const dp = new Array(n).fill(0).map(v => new Array(2).fill(0));
dp[0][0] = 0, dp[0][1] = -prices[0];
for (let i = 1; i < n; ++i) {
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]);
}
return dp[n - 1][0];
};