110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)
步驟一、確定狀態(tài):
確定dp數(shù)組及下標(biāo)含義 dp[i]是一個(gè)長(zhǎng)度為len(prices)的一維數(shù)組,表示的是在第i天持有股票
步驟二、推斷狀態(tài)方程:
第i天不持有股票,即dp[i][0], 那么兩個(gè)狀態(tài):
不持有股票是延續(xù)了昨天的, 那么dp[i][0] = dp[i-1][0]
不持有股票是因?yàn)榻裉靹傎u出,此時(shí)要拿手續(xù)費(fèi), dp[i][0]=dp[i- 1][1]+prices[i]-fee
這時(shí)候選最大的dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i]-fee), 其 他的都和II保持一樣,
第i天持有股票,即dp[i][1], 那么兩個(gè)狀態(tài):
1、第i-1天就持有股票, 保持現(xiàn)狀過(guò)來(lái)的, 最大利潤(rùn)就是昨天持有股票的最 大利潤(rùn)dp[i-1][1]
2、第i-1天沒(méi)有股票,第i天剛買進(jìn)來(lái)的, 那這時(shí)候的最大利潤(rùn)就是dp[i- 1][0]-prices[i],注意這個(gè)不是僅僅的-prices[i]了, 因?yàn)榇藭r(shí)可以進(jìn)行多次 交易了, 即使第i-1沒(méi)有股票,那么也可能會(huì)有更前面的利潤(rùn)傳過(guò)來(lái),dp[i][1] 選擇最大的: dp[i][1]=max(dp[i-1][1], dp[i-1][0]-prices[i])
步驟三、規(guī)定初始條件:
初始條件:
全局初始化0, 局部初始化dp[0][0]=0, dp[0][1]=-prices[0]
步驟四、計(jì)算順序:
從左往右, 從1開(kāi)始遍歷,返回的是最后沒(méi)有股票時(shí)候的最大利潤(rùn), 也就是dp[-1][0]
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:if len(prices) <= 1:return 0dp = [[0 for _ in range(2)] for _ in range(len(prices))]dp[0][0] = 0dp[0][1] = -prices[0]for i in range(1, len(prices)):# 第i天不持有股票dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i] - fee)# 第i天持有股票dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])return dp[-1][0]總結(jié)
以上是生活随笔為你收集整理的110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 109. Leetcode 309. 最
- 下一篇: 111. Leetcode 300. 最