309. 最佳買(mǎi)賣(mài)股票時(shí)機(jī)含冷凍期

思路

定義狀態(tài) 狀態(tài)轉(zhuǎn)移 初始情況

實(shí)現(xiàn)

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # 先想想狀態(tài)的轉(zhuǎn)移 買(mǎi)入->賣(mài)出 賣(mài)出->冷凍->買(mǎi)入 買(mǎi)入->持有->賣(mài)出
        # 定義狀態(tài) dp[i][k] = p 第i天的狀態(tài)為k時(shí)最大的利潤(rùn)p
        # k=0 為買(mǎi)入且持有 k=1為賣(mài)出 k=2為沒(méi)有股票 k=3為冷凍
        # 轉(zhuǎn)移 dp[i][0] = max(dp[i-2][1],dp[i-1][3],dp[i-1][2])  dp[i][1]=max(dp[i-1][0],dp[i-1][2])
        # dp[i][2] = max(dp[i-1][1],dp[i-1][2]) dp[i][3] = dp[i-1][1]
        p_len =len(prices)
        if not p_len: # 沒(méi)有天
            return 0
        if p_len==1: # 只有一天
            return 0
        # 大于等于倆天
        dp = [[0]*4 for _ in range(p_len)]
        # 初始態(tài) 第一天肯定除了買(mǎi)入都是0 第二天 如果可以把第一天的賣(mài)出 有賺錢(qián)就更新一下?tīng)顟B(tài)1的值
        dp[0][0] = -prices[0]
        for i in range(1,p_len):
            dp[i][0] = max(dp[i-1][3]-prices[i],dp[i-1][2]-prices[i],dp[i-1][0])
            dp[i][1] = dp[i-1][0]+prices[i]
            dp[i][2] = max(dp[i-1][1],dp[i-1][2])
            dp[i][3] = dp[i-1][1]
        print(dp)
        return max(dp[p_len-1][0],dp[p_len-1][1],dp[p_len-1][2],dp[p_len-1][3])

優(yōu)化

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容