LeetCode - 121. Best Time to Buy and Sell Stock

在從頭掃描數組的過程中,我們使用兩個變量maxCurr和maxSoFar分別存儲當前的差值和到目前爲止的最大差值,其中

maxCurr = Math.max(0, maxCurr += prices[i] - prices[i - 1]);

這行代碼的意思就是:當目前的prince差值爲正的時候,我們就繼續向後推進,而當prince的差值爲負的時候,我們就把當前的差值設置爲0。同時在每一步中比較maxCurr和maxSoFar的大小,將較大的值賦給maxSoFar:

maxSoFar = Math.max(maxCurr, maxSoFar);

時間複雜度爲O(n),空間複雜度爲O(1),代碼如下:

public class Solution {
    public int maxProfit(int[] prices) {
        if(prices == null || prices.length == 0) return 0;      // corner case

        int maxCurr = 0;        // current maximum value
        int maxSoFar = 0;       // maximum value found so far
        for(int i = 1; i < prices.length; i++){
            maxCurr = Math.max(0, maxCurr += prices[i] - prices[i - 1]);
            maxSoFar = Math.max(maxCurr, maxSoFar);
        }
        return maxSoFar;
    }
}

public class Solution{
    public int maxProfit(int[] prices){
        if(prices == null || prices.length == 0) return 0;

        int maxCurr = 0;
        int maxSoFar = 0;
        for(int i = 1; i < prices.length; i++){
            maxCurr = Math.max(0, maxCurr += prices[i] - prices[i - 1]);
            maxSoFar = Math.max(maxCurr, maxSoFar);
        }

        return maxSoFar;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章