买卖股票的最佳时机(含冷冻期)
卖出后下一天禁止买入的股票 DP;区分持股、当日卖出与可在次日买入的休息状态。
#algorithm
#snippet
#growing
#leetcode
#dp
[!info] related notes 动态规划 区间 DP 与状态机 DP 买卖股票的最佳时机
买卖股票的最佳时机(含冷冻期)
题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
状态设计
hold:今天结束后持股sold:今天刚卖出rest:今天结束后不持股、今天没有卖出,次日允许买入;可以由昨天卖出后今天休息得到
转移
newHold = max(oldHold, oldRest - price)
newSold = oldHold + price
newRest = max(oldRest, oldSold)
JavaScript
var maxProfit = function(prices) {
if (prices.length === 0) return 0;
let hold = -prices[0];
let sold = -Infinity;
let rest = 0;
for (let i = 1; i < prices.length; i++) {
const prevHold = hold;
const prevSold = sold;
const prevRest = rest;
hold = Math.max(prevHold, prevRest - prices[i]);
sold = prevHold + prices[i];
rest = Math.max(prevRest, prevSold);
}
return Math.max(sold, rest);
};