最佳买卖股票时机含冷冻期
力扣题目链接
与上题区别:卖出后一天不可买入
- dp数组状态:
dp[i][0]:持有股票(包括保持持有状态)
dp[i][1]:保持卖出股票(说明前面卖出了)
dp[i][2]:卖出股票(当天卖出)
dp[i][3]:冷冻期 - 递推公式
dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i], dp[i-1][3]-prices[i])//前一天持有,或前一天保持卖出,或冷冻期,
dp[i][1]=max(dp[i-1][1],dp[i-1][3])//前一天, 保持卖出股票;前一天为冷冻期
dp[i][2]=dp[i-1][0]+prices[i]//前一天持有股票,当天卖出;(注意:只有这种情况)
dp[i][3]=dp[i-1][2]//前一天卖出股票
3.初始化:
dp[0][0]=-prices[0]
dp[0][1]=0,dp[0][2]=0,dp[0][3]=0
var maxProfit = function(prices) {
let dp=new Array(prices.length).fill(0).map(()=>
new Array(4).fill(0)
)
dp[0][0]=-prices[0]
dp[0][1]=0
dp[0][2]=0
dp[0][3]=0
for(let i=1;i<prices.length;i++){
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-prices[i], dp[i-1][3]-prices[i])
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][3])
dp[i][2]=dp[i-1][0]+prices[i]
dp[i][3]=dp[i-1][2]
}
return Math.max(dp[prices.length-1][1],dp[prices.length-1][2],dp[prices.length-1][3])
};
买卖股票的最佳时机含手续费
力扣题目链接
与买卖股票||的区别:递推公式:
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]-fee)
var maxProfit = function(prices, fee) {
let dp=new Array(prices.length).fill(0).map(()=>
new Array(2).fill(0)
)
dp[0][0]=-prices[0]
dp[0][1]=0
for(let i=1;i<prices.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][1],dp[i-1][0]+prices[i]-fee)
}
return dp[prices.length-1][1]
};