刷題——買賣股票的最佳時機

題目描述

給定一個數組,它的第i個元素是一支給定股票第i天的價格。
設計一個算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。
注意:你不能同時參與多比交易(你必須在再次購買前出售掉之前的股票)。
Example:

輸入:[7, 1, 5, 3, 6, 4]
輸出: 7
解釋:在第2天(股票價格 = 1)的時候買入,在第3天(股票價格 = 5)的時候賣出,這筆交易所能獲得利潤 = 5 - 1 = 4。
隨後,在第4天(股票價格 = 3)的時候買入,在第5天(股票價格 = 6)的時候賣出,這筆交易所能獲得利潤 = 6 - 3 = 3。

思路分析

如果我們從買賣股票的行動來寫代碼的話思路大致是這樣:明確什麼時候買入,什麼時候賣出。
買入:當手裏沒有股票且第二天股價上漲的時候買入。
賣出:當手裏有股票且第二天股價下跌的時候賣出。
於是你通過一個布爾值來表示當前是否持有股票,按上述邏輯寫出了代碼。沒有問題。
但是如果我們進一步抽象,你會發現,上述操作其實就是把股價上漲的獲利全部拿到。

js代碼

function stock(arr) {
    let sum = 0;
    for(let i = 0; i < arr.length - 1; i++){
        if(arr[i + 1] > arr[i]){
            sum += arr[i + 1] - arr[i];
        }
    }
    return sum;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章