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).
(第二次买进之前,必须先对第一次的买进进行卖出操作)
<span style="font-family:Times New Roman;">public class Solution {
public int maxProfit(int[] prices) {
int len = prices.length;
if (len < 2){
return 0; </span><span style="font-family:Microsoft YaHei;"> //不足两天无法进行买进+卖出两次交易</span><span style="font-family:Times New Roman;">
}
int[] proBefore = new int[len];
int min = prices[0];
int i;
for (i = 1; i < len; i ++){ </span><span style="font-family:Microsoft YaHei;"> //将每一个前i - 1天的最大利益存入新数组</span><span style="font-family:Times New Roman;">
proBefore [i] = Math.max(proBefore [i - 1], prices[i] - min);
min = Math.min(prices[i], min);
}
int max = prices[len - 1];
int ret = 0;
for (i = len - 2; i >= 0; i --){ </span>
<span style="font-family:Microsoft YaHei;">/*从prices数组末尾开始往前找max,将当前位置i的max与当前股票值的差,与前i-1天的最大利益proVefore[i]的和,</span>
<span style="font-family:Microsoft YaHei;">与当前的ret值相比较*/</span><span style="font-family:Times New Roman;">
max = Math.max(max, prices[i]);
ret = Math.max(ret, max - prices[i] + proBefore[i]);
}
return ret;
}
}</span>