Leetcode_123. 买卖股票的最佳时机 III

最多只能交易两次,因此只能用到dp做法,也可以拓展到只能交易n次。
dp[i][j][0/1]表示到第i个物品,第j次交易,买/卖得到的当前收益,第一维可以优化掉。
然后第j次交易买的收益显然就是第j-1次交易卖后的收益再减去当前价格。而卖的收益就是前面算出的买的收益再加上当前价格,注意这里指的是先卖再买

code

class Solution {
public:
    int dp[3][2];
    int maxProfit(vector<int>& prices) {
        int n=prices.size();  
        int ans=0;
        for(int i=1;i<=2;i++){
            dp[i][0]=-0x3f3f3f3f;
            dp[i][1]=0;
        }
        for(int i=0;i<n;i++){
            for(int j=1;j<=2;j++){
                dp[j][0]=max(dp[j][0],dp[j-1][1]-prices[i]);
                dp[j][1]=max(dp[j][1],dp[j][0]+prices[i]);
                ans=max(ans,dp[j][1]);
            }
        }
        return ans;
    }
};
posted @ 2020-03-26 11:14  Keane1998  阅读(95)  评论(0编辑  收藏  举报