【LeetCode122】买卖股票的最佳时机II(比I多了个多次买卖)

1.题目

【LeetCode122】买卖股票的最佳时机II(比I多了个多次买卖)_第1张图片
【LeetCode122】买卖股票的最佳时机II(比I多了个多次买卖)_第2张图片

2.思路

比之前的I题【LeetCode121】买卖股票的最佳时机(附dp总结图)多了条件:可以多次买卖,但不能同时参与多笔交易。

——因此区别就是:
d p [ i ] [ 1 ] dp[i][1] dp[i][1]即第i天持股时的状态,2种可能情况:
1)前一天持股。
2)前一天不持股,即今天买了股票(现金数减少prices[i]),由于整个过程只交易一次,所以今天是整个过程的第一次买股票,即第i天的现金数为 d p [ i − 1 ] [ 0 ] − p r i c e s [ i ] dp[i-1][0]-prices[i] dp[i1][0]prices[i],所以 d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 1 ] , d p [ i − 1 ] [ 0 ] − p r i c e s [ i ] ) dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]) dp[i][1]=max(dp[i1][1],dp[i1][0]prices[i])

3.代码

class Solution {
     
public:
    int maxProfit(vector<int>& prices) {
     
        int n=prices.size();
        if(n==0||n==1){
     
            return 0;
        }
        vector<vector<int>>dp(n,vector<int>(2));
        dp[0][0]=0;
        dp[0][1]=0-prices[0];
        for(int i=1;i<n;i++){
     
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);
        }
        return dp[n-1][0];//最后一天结束不持股
    }
};

你可能感兴趣的:(#,动态规划,LeetCode)