美文网首页
best-time-to-buy-and-sell-stock-

best-time-to-buy-and-sell-stock-

作者: DaiMorph | 来源:发表于2019-07-21 22:29 被阅读0次

    第二种解法的核心是假设手上最开始只有0元钱,那么如果买入股票的价格为price,手上的钱需要减去这个price,如果卖出股票的价格为price,手上的钱需要加上这个price。

    它定义了4个状态:

    Buy1[i]表示前i天做第一笔交易买入股票后剩下的最多的钱;

    Sell1[i]表示前i天做第一笔交易卖出股票后剩下的最多的钱;

    Buy2[i]表示前i天做第二笔交易买入股票后剩下的最多的钱;

    Sell2[i]表示前i天做第二笔交易卖出股票后剩下的最多的钱;

    那么Sell2[i]=max{Sell2[i-1],Buy2[i-1]+prices[i]}

       Buy2[i]=max{Buy2[i-1],Sell[i-1]-prices[i]}
    
       Sell1[i]=max{Sell[i-1],Buy1[i-1]+prices[i]}
    
       Buy1[i]=max{Buy[i-1],-prices[i]}
    

    可以发现上面四个状态都是只与前一个状态有关,所以可以不使用数组而是使用变量来存储即可。

    class Solution {
    public:
        int maxProfit(vector<int> &prices) {
            if(prices.size()<2)return 0;
            int buy1=INT_MIN,sell1=0,buy2=INT_MIN,sell2=0;
            for(int i=0;i<prices.size();i++)
            {
                buy1=max(buy1,-prices[i]);
                sell1=max(sell1,buy1+prices[i]);
                buy2=max(buy2,sell1-prices[i]);
                sell2=max(sell2,buy2+prices[i]);
            }
            return sell2;
        }
    };
    

    相关文章

      网友评论

          本文标题:best-time-to-buy-and-sell-stock-

          本文链接:https://www.haomeiwen.com/subject/ivxblctx.html