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).
int maxProfit(vector<int> &prices) { if(prices.size() <= 1) { return 0; } int size = (int)prices.size(); vector<int> leftProfit(size, 0); leftProfit[0] = 0; int minValue = prices[0]; int result = 0; for(int i = 1; i < size; i++) { if(prices[i] > minValue) { leftProfit[i] = (prices[i] - minValue > leftProfit[i-1] ? prices[i] - minValue : leftProfit[i-1]); } else { minValue = prices[i]; leftProfit[i] = leftProfit[i-1]; } } result = leftProfit[size-1] > leftProfit[size-2] ? leftProfit[size-2] : leftProfit[size-1]; int maxValue = prices[size -1]; int rightMaxProfit = 0; for(int i = size - 2; i >= 0; i--) { if(prices[i] < maxValue) { rightMaxProfit = (rightMaxProfit > maxValue - prices[i] ?rightMaxProfit : maxValue - prices[i]); } else { maxValue = prices[i]; } if(i == 0) { result = (result > rightMaxProfit ? result : rightMaxProfit); } else { result = (result > rightMaxProfit + leftProfit[i-1] ? result : rightMaxProfit + leftProfit[i-1]); } } return result; }