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).
这道题允许买卖两次,所以这道题可以转化为几何问题,就是寻找K条线段里最长的N条线段的加和(交易K次的话)
交易两次,K取2即可
代码来自于Code_Ganker
public int maxProfit(int[] prices) {
if (prices == null || prices.length == 0)
return 0;
int[] local = new int[3];
int[] global = new int[3];
for (int i = 0; i < prices.length - 1; i++) {
int diff = prices[i + 1] - prices[i];
for (int j = 2; j >= 1; j--) {
local[j] = Math.max(local[j] + diff, global[j - 1]
+ (diff > 0 ? diff : 0));
global[j] = Math.max(global[j], local[j]);
}
}
return global[2];
}