309. 最佳買賣股票時機含冷凍期

題目分析

這個題目的題眼在于狀態(tài)轉(zhuǎn)換的比較多.

我認為最好的一種解法是使用了三個一維DP數(shù)組維護狀態(tài).

  1. buy_dp
  2. sell_dp
  3. cool_dp

使用了三個一維DP數(shù)組的好處

  1. 空間換復(fù)雜度, 更多的空間, 可以使我們的狀態(tài)轉(zhuǎn)化更容易的表達.

buy_dp的狀態(tài)

  1. buy_dp[i]的狀態(tài)可以從cool_dp[i-1]buy_dp[i-1]來轉(zhuǎn)化過來.
  2. buy_dp[i]buy_dp[i-1]的空狀態(tài).

代碼自解釋.

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        n = len(prices)
        
        if n == 0:
            return 0
        # 狀態(tài)解釋
        # buy_dp[i] 表示的是在 i 進行買入操作的最大收益
        # sell_dp[i] 表示的是在 i 進行賣出操作的最大收益
        # cool_dp[i] 表示的是在 i 處于冷凍期的時候的最大收益
        buy_dp = [0]*n
        sell_dp = [0]*n
        cool_dp = [0]*n
        
        # 狀態(tài)初始化
        
        buy_dp[0] = -prices[0]
        sell_dp[0] = 0
        cool_dp[0] = 0
        
        for i in range(1,n):
            # buy_dp[i] = buy_dp[i-1]表示的是空操作
            # buy_dp[i] = cool_dp[i-1]-prices[i-1] 
            # 表示的是從冷卻期狀態(tài) 轉(zhuǎn)化出來, 開始買入
            buy_dp[i] = max(buy_dp[i-1],cool_dp[i-1]-prices[i])
            # sell_dp[i] = sell_dp[i-1] 表示的是空操作
            # sell_dp[i] = buy_dp[i-1]+prices[i]
            # 表示狀態(tài)轉(zhuǎn)換, 從買入狀態(tài)進入賣出狀態(tài)
            sell_dp[i] = max(sell_dp[i-1], buy_dp[i-1]+prices[i])
            
            # cool_dp[i] = cool_dp[i-1] 表示空操作
            # cool_dp[i] = sell_dp[i-1] 表示的是狀態(tài)轉(zhuǎn)換
            cool_dp[i] = max(cool_dp[i-1], sell_dp[i-1])
        # 最后的狀態(tài)是賣出或者cooldown 的最大值
        return max(sell_dp[-1],cool_dp[-1])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 簡介:最近大火的DBA,他的核心理念是幫投資者提高投資認知、幫優(yōu)質(zhì)項目增加曝光率,那么他是如何設(shè)計游戲規(guī)則以實現(xiàn)這...
    長風少俠閱讀 371評論 0 4
  • 最近幾天,王寶強離婚事件引起軒然大波,朋友圈、空間已經(jīng)被刷屏,各種說辭,各種猜疑,各種八卦,各種議論,各種吐槽。殊...
    永遠的小丸子呀閱讀 93評論 1 1
  • 1 小強:老師,今天我把小森打出血了! 老師:為什么? 小強:我要讓他把昨天打我流的血還回來! 2 小林:老師,你...
    那年木槿花開閱讀 622評論 40 26

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