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;
    }
}

results matching ""

    No results matching ""