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; } };