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) {
int len = prices.size();
if(len<=0)
return 0;
vector<int> curProfit(len,0);
vector<int> futureProfit(len,0);
int low = prices[0];
int maxProfit = 0;
for(int i=1;i<len;i++)
{
low = min(prices[i],low);
curProfit[i] = max(curProfit[i-1],prices[i]-low);
}
int high = prices[len-1];
for(int i=len-2;i>=0;i--)
{
high = max(prices[i],high);
futureProfit[i] = max(futureProfit[i+1],high-prices[i]);
}
for(int i=0;i<len;i++)
maxProfit = max(maxProfit,curProfit[i]+futureProfit[i]);
return maxProfit;
}
};