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.
public class Solution { public int maxProfit(int[] prices) { int res = 0; if (prices==null || prices.length<=1) { return 0; } int[] arrA = new int[prices.length]; int min = prices[0]; for (int i = 1; i < prices.length; i++) { min = Math.min(min, prices[i]); arrA[i] = Math.max(arrA[i-1], prices[i]-min); } int max = prices[prices.length-1]; int[] arrB = new int[prices.length]; for (int i = prices.length-2; i >= 0; i--) { max = Math.max(max, prices[i]); arrB[i] = Math.max(max-prices[i], arrB[i+1]); } for (int i = 0; i < prices.length; i++) { res = Math.max(res, arrA[i]+arrB[i]); } return res; } }