对于第i个节点, 计算出从 0 - i的最小值, 从i + 1 - n 的最大值。
public class Solution {
public int maxProfit(int[] prices) {
// Start typing your Java solution below
// DO NOT write main() function
int []small = new int[prices.length + 10];
int []max = new int[prices.length + 10];
for(int i = 0; i < prices.length; ++ i)
{
if(i == 0 || prices[i] < small[i-1]) small[i] = prices[i];
else small[i] = small[i-1];
}
for(int i = prices.length - 1; i >= 0; -- i)
{
if(i == prices.length - 1 || prices[i] > max[i+1]) max[i] = prices[i];
else max[i] = max[i+1];
}
int max_profit = 0;
for(int i = 0; i < prices.length - 1; ++ i)
{
if(max[i+1] - small[i] > max_profit)
max_profit = max[i+1] - small[i];
}
return max_profit;
}
}