dp方程:
首先今天作為第n天收益有兩種情況,有無(wú)股票,用hold來(lái)保存有股票的收益情況矾飞,unhold保存無(wú)股票的收益
- 今天有股票那么可能是昨天就有或者今天買入,今天買入則昨天沒(méi)有拋出(否則為冰凍期) hold[i]= Math.max(hold[i-1], unhold[i-2]-prices[i])
- 今天沒(méi)有股票那么可能是昨天就沒(méi)有或者昨天拋出呀邢,昨天拋出則前天unhold[i] = Math.max(unhold[i-1], hold[i-2]+prices[i])
注意邊界初始化
最終結(jié)果手中沒(méi)有股票
var maxProfit = function(prices) {
let n = prices.length
if(n<2) {return 0}
let hold = [-prices[0], Math.max(-prices[1], -prices[0])]
let unhold = [0, Math.max(prices[1]-prices[0], 0)]
for(let i=2; i<n; i++) {
hold[i] = Math.max(hold[i - 1], unhold[i - 2] - prices[i]);
unhold[i] = Math.max(unhold[i - 1], hold[i - 1] + prices[i]);
}
return unhold[n-1]
};