121. Best Time to Buy and Sell Stock
简单点说,就是低买高卖。但和现实不同的是,有后悔药可以吃。。。
基本的思路和two pointers类似:有一个指针A指用于遍历数组,另一个指针B永远指向当前的最低点。每次移动指针A时就计算一下利润并视情况替换maxProfit。关键在于指针B要及时更新。
public class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length <= 1)
return 0;
int lastValue = prices[0]; // 上一个值
int maxProfit = 0;
int lowValue = prices[0]; // 目前的最小值
for (int i = 1; i < prices.length; i++) {
int value = prices[i];
// 上升趋势时,计算最大利润
if (value > lastValue) {
maxProfit = Integer.max(maxProfit, value - lowValue);
}
// 下降趋势时,找机会替换最小值
else if (value < lowValue) {
lowValue = value;
}
lastValue = value;
}
return maxProfit;
}
}