day54 动态规划part11 代码随想录算法训练营 188. 买卖股票的最佳时机 IV

题目:188. 买卖股票的最佳时机 IV

我的感悟:

  • 我真棒!!

理解难点:

  • 类比上一道题,
  • 掌握不好边界,就代入一个数值来推
  • 为什么是2K+1,因为要遍历到下标是[2K]

听课笔记:

我的代码:

class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        if len(prices)==1:  # 这个写不写都能通过
            return 0 
        dp = [[0]* (2*k+1) for _ in range(len(prices))]
        # 初始化,奇数为买入,所以现金为负数
        for j in range(1,2*k+1,2):  # 从1,开始
            dp[0][j] =  0-prices[0] # 
        # 奇数买,偶数卖
        # 类比 
        # dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i])   # 今天买了
        # dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i])   # 今日卖了
        for i in range(1,len(prices)):
            for j in range(1,2*k,2):
                # j=1
                dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]-prices[i])
                dp[i][j+1] = max(dp[i-1][j+1],dp[i-1][j]+prices[i])
        return dp[-1][-1]

通过截图:

老师代码:

扩展写法:

资料:

 188.买卖股票的最佳时机IV  

本题是123.买卖股票的最佳时机III 的进阶版  

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

https://programmercarl.com/0188.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAIV.html

posted @ 2024-03-04 16:36  o蹲蹲o  阅读(4)  评论(0编辑  收藏  举报