[Leetcode解題] Best Time to Buy and Sell Stock with Transaction Fee - greedy解
11 February 2022
medium
greedy
題目
714. Best Time to Buy and Sell Stock with Transaction Fee 給定一個數組prices,其中prices[i]表示第i天的股票價格,以及一個代表交易費用的整數fee。
找到您可以實現的最大利潤。您可以進行任意多次交易,但每次交易都需要支付交易費用。
注意:您不能同時進行多個交易(即,在買入股票之前必須先將其出售)。
解題思路
解法:貪心算法
將問題分成多個「區間」來考慮,每個區間的結尾就是購買的時間,在接下來的最低價格時出售股票。
算法
我們可以使用貪心算法來解決這個問題。我們在數組的每一個元素之間跳躍,如果當前元素的價格比下一個元素的價格高,則我們將當前元素出售,並使用下一個元素購買,同時累加利潤。
實作
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
cash, hold = 0, -prices[0]
for i in range(1, len(prices)):
cash = max(cash, hold + prices[i] - fee)
hold = max(hold, cash - prices[i])
return cash
複雜度
因為只需要遍歷一遍股價序列,所以是 $O(n)$ 的。