Best Time to Buy and Sell Stock III

DP

    int maxProfit(vector<int> &prices) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(prices.empty())
            return 0;
        vector<int> profit1(prices.size(),0);
        vector<int> profit2(prices.size(),0);
        
        int minPrice = prices[0];
        for(int i=1;i<prices.size();i++)
        { 
            minPrice = min(minPrice,prices[i]);
            profit1[i] = max(profit1[i-1],prices[i]-minPrice);
        }
        int maxPrice = prices[prices.size()-1];
        for(int i=prices.size()-2;i>=0;i--)
        {
            maxPrice = max(maxPrice,prices[i]);
            profit2[i] = max(profit2[i+1],maxPrice-prices[i]);
        }
        
        int maxProfit = 0;
        
        for(int i=0;i<prices.size();i++)
            maxProfit = max(maxProfit,profit1[i]+profit2[i]);
        return maxProfit;
        
    }

  

posted @ 2013-10-08 15:01  summer_zhou  阅读(131)  评论(0编辑  收藏  举报