买卖股票的最佳时机(含冷冻期)
状态机 DP 经典题:买入、卖出、冷冻三种状态,练习状态拆分。
#resource / algorithm
#type / snippet
#status / growing
#source / leetcode
#algo / dp
[!info] related notes 动态规划 区间 DP 与状态机 DP 买卖股票的最佳时机
买卖股票的最佳时机(含冷冻期)
题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
状态设计
hold:今天结束后持股sold:今天刚卖出rest:今天结束后不持股且不在冷冻期
转移
hold = max(hold, rest - price)
sold = oldHold + price
rest = max(rest, oldSold)
JavaScript
var maxProfit = function(prices) {
let hold = -prices[0];
let sold = 0;
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);
};