題目描述
給定一個數組,它的第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;
}