309.最佳买卖股票时机含冷冻期
题目链接 309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)
讲解链接 代码随想录 (programmercarl.com)
包含了冷冻期的股票买卖问题的dp数组结构更加复杂:代码随想录 (programmercarl.com)
包含了四种状态:
1、持有股票
2、不持有股票
3、今日卖出股票(专门设立,为了导出冷冻期)
4、冷冻期
其中持有股票可能是之前就持有、之前冷冻期今日买入、之前不持有今日买入;
for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],max(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];}
此外、在最后则需要比较状态2、3、4取最大值进行输出:
return max(dp[prices.size()-1][1],max(dp[prices.size()-1][2],dp[prices.size()-1][3]));
714.买卖股票的最佳时机含手续费
题目链接 714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)
讲解链接 代码随想录 (programmercarl.com)
本题比起较简单的可重复买卖股票问题,只需要在买入股票或者卖出股票时加上手续费即可:
dp[0][0]=-prices[0]-fee;for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]-fee);dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);}