Best Time to Buy and Sell Stock with Cooldown

买了股票需要隔一天才能重新买。

DP Space O(n)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n=prices.size();

        if(n<=1)return 0;

        vector<int> hold(n),unhold(n);

        hold[0]=-prices[0];
        hold[1]=max(-prices[1],-prices[0]);
        unhold[1]=max(0,prices[1]-prices[0]);

        for(int i=2;i<prices.size();i++)
        {
            unhold[i]=max(unhold[i-1],prices[i]+hold[i-1]);
            hold[i]=max(hold[i-1],unhold[i-2]-prices[i]);
        }
        return unhold.back();
    }
};

看了别人解决方案,才发现可以实现O(1) space!!

想到了O(n)的思路后,O(1)的解决方案很容易想出,替换就好了。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n=prices.size();

        if(n<=1)return 0;

        int hold=max(-prices[1],-prices[0]);
        int prev_sell=0;
        int sell=max(0,prices[1]-prices[0]);

        for(int i=2;i<prices.size();i++)
        {
            hold=max(hold,prev_sell-prices[i]);
            prev_sell=sell;
            sell=max(sell,prices[i]+hold);
        }
        return sell;
    }
};

results matching ""

    No results matching ""