解題思路:
- 第i天持有股票
dp_1[i]
的最大收益 由兩個(gè)狀態(tài)轉(zhuǎn)移而來(lái)泊碑, 昨天持有股票or昨天沒有持有股票但今天買入了士嚎,求兩個(gè)狀態(tài)的收益最大值dp_1[i] = max(dp_1[i-1], dp_0[i-1]-prices[i])
- 第i天沒有持有股票
dp_0[i]
的最大收益八千,由兩個(gè)狀態(tài)轉(zhuǎn)移而來(lái),昨天沒有持有or昨天持有膘格,今天賣出了伪很,求兩個(gè)狀態(tài)的收益最大值dp_0[i] = max(dp_0[i-1], dp_1[i-1]+prices[i]-fee)
- 初始狀態(tài): 第一天不持有股票勤晚,收益為0:
dp_0[0]=0
猖败,第一天持有股票没隘,收益為負(fù)值,因?yàn)橘I入了當(dāng)天的股票:dp_1[1]=-prices[0]
- 最后一天不持有股票窘奏,得出最大的收益
dp_0[-1]
python3代碼如下:
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
dp_0 = [0] * len(prices)
dp_1 = [0] * len(prices)
dp_0[0] = 0
dp_1[0] = -prices[0]
for i in range(1, len(prices)):
dp_0[i] = max(dp_0[i-1], dp_1[i-1]+prices[i]-fee)
dp_1[i] = max(dp_1[i-1], dp_0[i-1] - prices[i])
return dp_0[-1]