day55 动态规划part12 代码随想录算法训练营 309. 买卖股票的最佳时机含冷冻期

题目:309. 买卖股票的最佳时机含冷冻期

我的感悟:

  • 网友讲的更好,更好理解。

理解难点:

  • 冷冻期是i-2
  • 初始化dp【1】【0】是买入的用的最小消耗,max(-prices[0],-prices[1])
  •  

听课笔记:

  • 听不懂,可以借鉴的是:卖的状态可以进一步拆分

我的代码:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices)==1:
            return 0
        # 持有 dp[i][0] 表示持有
        # 不持有dp[i][1] 表示不持有,已卖出
        dp = [[0]*2 for _ in range(len(prices))]
        # 初始化
        dp[0][0] = -prices[0]
        dp[0][1] = 0 # 第0天,买入并卖出,收益0
        dp[1][0] = max(0-prices[0],0-prices[1]) # 要么今天买,要么昨天买,取最大
        dp[1][1] = max(0,prices[1]-prices[0])# 要么没买,要么昨天买,今天卖
        # 递推公式
        for i in range(2,len(prices)):
            dp[i][0] = max(dp[i-1][0],dp[i-2][1]-prices[i])   # 要么沿用昨天,要么过了冷冻期后买
            dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i])
        return dp[-1][1]

通过截图:

老师代码:

扩展写法:

 

网友资料:

老师的资料:

309.最佳买卖股票时机含冷冻期 

本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰 

视频讲解:https://www.bilibili.com/video/BV1rP4y1D7ku

https://programmercarl.com/0309.%E6%9C%80%E4%BD%B3%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E6%97%B6%E6%9C%BA%E5%90%AB%E5%86%B7%E5%86%BB%E6%9C%9F.html

posted @ 2024-03-05 11:23  o蹲蹲o  阅读(2)  评论(0编辑  收藏  举报