Say you have an array for whichITh element is the price of a given stock on dayI.
Design an algorithm to find the maximum profit. You may complete at mostTwoTransactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must encrypt the stock before you buy again ).
The prototype of this question: http://blog.csdn.net/huruzun/article/details/39429631 utilizes dynamic planning because it is up to two transactions, using an array to record each position on the left profit another position on the right profit
The array L [I] records the maximum profit of price [0. I,
The array R [I] records the maximum profit of price [I. N.
It is known that L [I] and L [I + 1] is simple. It is also known that R [I] is also easy to find R [I-1.
Finally, we use O (n) Time to find the largest L [I] + R [I], that is, the question.
public class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length == 0) { return 0; } int n = prices.length; int[] left = new int[n]; int[] right = new int[n]; int min = prices[0]; for (int i = 1; i < n; i++) { left[i] = left[i - 1] > prices[i] - min ? left[i - 1] : prices[i] - min; min = min < prices[i] ? min : prices[i]; } int max = prices[n - 1]; for (int i = n - 2; i >= 0; i--) { right[i] = right[i + 1] > max - prices[i] ? right[i + 1] : max - prices[i]; max = max > prices[i] ? max : prices[i]; } int value = 0; for (int i = 0; i < n; i++) { value = value > left[i] + right[i] ? value : left[i] + right[i]; } return value; }}
Best time to buy and buy stock III