class Solution {
public:
int maxProfit(vector<int>& prices) {
const int N=3e4+10;
int ans=0;
int dp[N][2];
//dp[i][0]:考虑前i天的生意,并且此时手上无股票,到达该状态能够赚的最多金钱
//dp[i][1]:考虑前i天的生意,并且此时手上有股票,到达该状态能够赚的最多金钱
//我们用状态机来进行转换
dp[0][0]=0,dp[0][1]=-0x3f3f3f3f;
int n=prices.size();
for(int i=1;i<=n;i++)
{
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i-1]);
//前一天手上无股票,并且今天也没有操作;前一天手上有股票,但今天抛售掉了
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i-1]);
//前一天手上有股票,并且今天
}
return max(dp[n][0],dp[n][1]);
}
};
LeetCode-买卖股票的最佳时机II
最新推荐文章于 2024-06-02 22:16:46 发布