leetcode[123]Best Time to Buy and Sell Stock III

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

class Solution {

public:

    int maxProfit(vector<int> &prices) {

        if(prices.size()==0)return 0;

        int n=prices.size();

        vector<int> left(n);

        vector<int> right(n);

        int min=prices[0];

        int max=prices[n-1];

        int res=0;

        for(int i=1;i<n;i++)

        {

            min=min<prices[i]?min:prices[i];

            left[i]=left[i-1]>(prices[i]-min)?left[i-1]:(prices[i]-min);

        }

        for(int j=n-2;j>=0;j--)

        {

            max=max>prices[j]?max:prices[j];

            right[j]=right[j+1]>(max-prices[j])?right[j+1]:(max-prices[j]);

        }

        for(int i=0;i<n;i++)

        {

            res=res>(left[i]+right[i])?res:(left[i]+right[i]);

        }

        return res;

    }

};

 

你可能感兴趣的:(LeetCode)