用动态规划来做,在一天之中可能出现两种状态中的一个:持有股票或者未持有股票。
持有股票可能是由于之前就持有,也有可能是今天进行了买入。
未持有股票可能是由于之前就未持有,也有可能是今天进行了卖出。
对于每种可能的状态,都记录此时手上持有的现金的最大可能值。
在最后一天,如果还持有股票,那么必然会卖出,因此只要输出最后一天不持有股票的状态即可。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
int dp[n][2];
if(n==1) return 0;
dp[0][0]=0;
dp[0][1]=-prices[0];
for(int i=1;i<n;++i){
dp[i][0]=max(dp[i-1][1]+prices[i],dp[i-1][0]);
dp[i][1]=max(dp[i-1][1],-prices[i]);
}
return dp[n-1][0];
}
};