ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

代码随想录训练营第五十一天309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费

2026/8/4 3:27:16 拓冰建站 浏览量
代码随想录训练营第五十一天309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费

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]);}