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