Total Accepted: 7877 Total Submissions: 35958
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).
public class Solution {
// for each [0, i][i, len-1] compute maxProfit, i = 0 ~ len-1
public int maxProfit(int[] prices) {
int[] lo = new int[prices.length];
int[] hi = new int[prices.length];
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int sum = 0;
// find max in left sub array
for (int i = 0; i < prices.length; i++) {
if (prices[i] < min) min = prices[i];
if ((prices[i] - min) > sum) sum = prices[i] - min;
lo[i] = sum;
}
sum = 0;
// find max in right sub array
for (int i = prices.length - 1; i >= 0; i--) {
if (prices[i] > max) max = prices[i];
if ((max - prices[i]) > sum) sum = max - prices[i];
hi[i] = sum;
}
sum = 0;
for (int i = 0; i < prices.length; i++) {
if (lo[i] + hi[i] > sum) sum = lo[i] + hi[i];
}
return sum;
}
}