Say you have an array for which the i th 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).
public class Solution {
public int maxProfit(int[] prices) {
if(prices.length < 2 || prices == null) return 0;
int[] left = new int[prices.length];
int[] right = new int[prices.length];
int profit = 0;
left[0] = 0;
int minleft = prices[0];
for(int i = 1; i < prices.length; i++)
{
minleft = Math.min(minleft, prices[i]);
left[i] = Math.max(left[i-1], prices[i]-minleft);
}
right[prices.length-1] = 0;
int maxright = prices[prices.length-1];
for(int j = prices.length-2; j > 0; j--)
{
maxright = Math.max(maxright, prices[j]);
right[j] = Math.max(right[j+1], maxright-prices[j]);
}
for(int k = 0; k < prices.length; k++)
{
profit = Math.max(profit, left[k]+right[k]);
}
return profit;
}
}