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).
Code:
<span style="font-size:14px;">class Solution {
public:
int maxProfit(vector<int> &prices) {
const int length = prices.size();
if (length < 2) return 0;
vector<int> first(length, 0), second(length, 0);
int temp = prices[0];
for (int i = 1; i < length; ++i) {
first[i] = max(first[i-1], prices[i]-temp);
temp = min(temp, prices[i]);
}
temp = prices[length-1];
for (int i = length-2; i >= 0; --i) {
second[i] = max(second[i+1], temp-prices[i]);
temp = max(temp, prices[i]);
}
temp = first[0]+second[0];
for (int i = 1; i < length; ++i)
temp = max(temp, first[i]+second[i]);
return temp;
}
};</span>