309. 最佳买卖股票时机含冷冻期
链接:代码随想录
一开始自己的分析是:
class Solution { /* 动态规划 没有k笔交易的要求 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 则一天有3种可能状态: dp[i][0] 第 i 天持有股票----------1、前一天持有股票 2、 前一天不持有股票,不是冷冻期,今天买入股票 3前一天不持有股票,是冷冻期, 今天买入股票 dp[i][1] 第 i 天不持有股票,不是冷冻期 -----1、前一天持有股票,第i天售卖掉 -----2、前一天为不持有股票,不是冷冻期 -----3、前一天为不持有股票,是冷冻期 dp[i][2] 第i天不持有股票,是冷冻期-------1、前一天为持有股票,且卖出上一天的股票。 */ public: int maxProfit(vector<int>& prices) { int n=prices.size(); vector<vector<int>>dp(n,vector<int>(3,0)); dp[0][0]=-prices[0]; dp[0][1]=0; for(int i=1;i<n;i++) { dp[i][2] =dp[i-1][1]; dp[i][0] =max(dp[i-1][0],max(dp[i-1][1],dp[i-1][2])-prices[i]); dp[i][1] =max(dp[i-1][1],max(dp[i-1][0]+prices[i],dp[i-1][2])); } return max(dp[n-1][1],dp[n-1][2]); } };说实在的这个暂时没看懂。周末看吧。比起我分析的状态,又多了一种状态,看着十分头大。
714.买卖股票的最佳时机含手续费
链接:代码随想录
![]()
和答案不一样,但是还是有些相似的。
class Solution { /* 在每次买入时减去手续费 第i天持有股票: dp[i][0]=dp[i-1][0],dp[i-1][1]-prices[i]-fee 第i天不持有股票 dp[i][1]=dp[i-1][1],dp[i-1][0]+prices[i] */ public: int maxProfit(vector<int>& prices, int fee) { int sum=0; int n=prices.size(); vector<vector<int>>dp(n,vector<int>(2,0)); dp[0][0]=-prices[0]-fee; dp[0][1]=0; for(int i=1;i<n;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]); } return dp[n-1][1]; } };
文章探讨了两种股票交易问题的解决方案,一种考虑了冷冻期,使用动态规划方法,定义了三种状态来跟踪每天的持有或不持有股票情况;另一种涉及交易手续费,同样用动态规划,通过两种状态更新来决定持有或卖出股票以最大化利润。



535

被折叠的 条评论
为什么被折叠?



