算法學習之股票的最大利潤

題目:假設把某股票的價格按照時間先後順序存儲在數組中,請問買賣該股票一次可能獲得的最大利潤是多少?例如,一隻股票在某些時間節點的價格爲{9, 11, 8, 5, 7, 12, 16, 14}。如果我們能在價格爲5的時候買入並在價格爲16時賣出,則能收穫最大的利潤11。

思路:因爲時間順序的存在,所以我們只要關係最小值及當前值與最小值的差值即可,遍歷正如時間順序一樣一直向後推進

    public int getMaxDiff(int[] numbers) {

        if (numbers == null || numbers.length < 2) return -1;

        int minNumber = numbers[0], maxDiff = numbers[1] - numbers[0];

        for (int i = 2; i < numbers.length; i++) {
            if(minNumber>numbers[i-1]) {
                minNumber = numbers[i-1];
            }
            int diff = numbers[i] -minNumber;
            if(diff>maxDiff) {
                maxDiff=diff;
            }
        }

        return maxDiff;
    }

時間複雜度:O(n)

空間複雜度:O(1)

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