public class Solution {
public int maxProfit(int[] prices) {
if (prices.length<2) return 0;
int res = 0;
int[] before = new int[prices.length];
int[] after = new int[prices.length];
before[0] = 0;
after[prices.length-1] = 0;
int min = prices[0];
int max = prices[prices.length-1];
for (int i=1; i<prices.length; i++) {
if (prices[i]>=min) before[i] = Math.max(prices[i]-min, before[i-1]);
else {
min = prices[i];
before[i] = before[i-1];
}
}
for (int i=prices.length-2; i>=0; i--) {
if (prices[i]<=max) after[i] = Math.max(max-prices[i], after[i+1]);
else {
max = prices[i];
after[i] = after[i+1];
}
}
for (int i=0; i<prices.length; i++) {
res = Math.max(res, before[i]+after[i]);
}
return res;
}
}
1. 第i天的最大利益等于这天之前的最大利益+这天之后的最大利益,找出最大的.
回复删除2. before[] 和 after[] 两个数组储存,单调递增或递减.
3. 求出before[i]+after[i]最大值.