714.買賣股票的最佳時機含手續費
給定一個整數陣列 prices,其中第 i 個元素代表了第 i 天的股票價格 ;非負整數 fee 代表了交易股票的手續費用。
你可以無限次地完成交易,但是你每筆交易都需要付手續費。如果你已經購買了一個股票,在賣出它之前你就不能再繼續購買股票了。
返回獲得利潤的最大值。
注意:這裡的一筆交易指買入持有並賣出股票的整個過程,每筆交易你只需要為支付一次手續費。
示例 1:
輸入: prices = [1, 3, 2, 8, 4, 9], fee = 2
輸出: 8
思考
跟上一題的區別是多了個買賣手續費,用dp來做比較簡單,程式碼與122基本一樣,只是多減了個手續費。
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
# dp[i][0] 第i天持有股票時的現金
# dp[i][1] 第i天不持有股票的現金
dp = [[0] * 2 for _ in range(len(prices))]
dp[0][0] = -prices[0]
dp[0][1] = 0
for i in range(1,len(prices)):
#可以每天交易
dp[i][0] = max(dp[i-1][0],dp[i-1][1]-prices[i])
dp[i][1] = max(dp[i-1][1],prices[i]+dp[i-1][0]-fee)
return dp[len(prices)-1][1]