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

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

时间:2024-03-04 16:45:08浏览次数:33  
标签:max part11 随想录 range 最佳时机 prices 188 day54 dp

题目: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

标签:max,part11,随想录,range,最佳时机,prices,188,day54,dp
From: https://www.cnblogs.com/liqi175/p/18052097

相关文章

  • 代码随想录 第13天 | ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结
    leetcode:239.滑动窗口最大值-力扣(LeetCode)思路:看了挺长时间才反应过来与暴力算法的区别。当遇到比上一个元素大的值时,将上一个元素剔除,小于时加入队列中,每次等于窗口长度时将顶端也就是最大值存起来classSolution{publicint[]maxSlidingWindow(int[]nums,intk)......
  • day54 动态规划part11 代码随想录算法训练营 123. 买卖股票的最佳时机 III
    题目:123.买卖股票的最佳时机III我的感悟:困难像弹簧,你强他就弱,你弱它就强!理解难点:5个状态,听课笔记:我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:iflen(prices)==1:return0#5种状态#dp[i......
  • day52 动态规划part10 代码随想录算法训练营 122. 买卖股票的最佳时机 II
    题目:122.买卖股票的最佳时机II我的感悟:只要定义清楚,就可以做出来的。理解难点:先判断等于听课笔记:看了文字版本,感觉还是我的思路最牛逼!!我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:#dp[i]为截止到当前能获得的最大利润......
  • day53 动态规划part10 代码随想录算法训练营 121. 买卖股票的最佳时机
    题目:121.买卖股票的最佳时机我的感悟:soeasy 打印dp确实能发现问题理解难点:注意条件,及时更新dp听课笔记:看了,老师的代码,感觉没有我的简洁,哈哈!!我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:#设dp[i]为截止到当前能获得......
  • day52 动态规划part9 代码随想录算法训练营 337. 打家劫舍 III
    题目:337.打家劫舍III我的感悟:跳过,目前树的不学理解难点:树的理解,以及树的遍历听课笔记:我的代码:通过截图:老师代码:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#......
  • day52 动态规划part9 代码随想录算法训练营 213. 打家劫舍 II
    题目:213.打家劫舍II我的感悟:看了题解不难,就是环这个思路转化很重要!理解难点:环的转化为,首,尾。代码上面可以省略长度为2的校验听课笔记:分3中情况:不考虑首尾|考虑首|考虑尾而情况2和情况3包含了情况1我的代码:classSolution:defrob(self,nums:List[i......
  • 代码随想录 第11天 | 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150.
    Leetcode:20.有效的括号-力扣(LeetCode)思路:就是用栈存左右括号,都为0就说明true,不为零说明有没有匹配成功的括号,是false,思路没有问题,时间超时了,还得用C++...,java更好的思路如下:如果是左括号,push右括号,如果是右括号,判断是否与栈顶元素匹配,JAVA//deque.isEmpty();这个方法返回......
  • 数组(基于代码随想录)的随笔
    数组数组基础知识数组是存放在连续内存空间上的相同类型数据的集合。数组的元素是不能删的,只能覆盖。那么二维数组在内存的空间地址是连续的么?Java的二维数组在内存中不是3*4的连续地址空间,而是四条连续的地址空间组成!数组的经典题目二分法二分法时间复杂度:O(logn)......
  • 夜深忽梦少年事(Part11)
    Part11先拔头筹这章更新的有点慢,因为博主上学期期末考试前一直在忙毕业设计,后来又生了大病,所以一直都没时间写,寒假的时候也忘了这回事……坐上去衢州的火车,我迎来了我最后一个OI赛季,路上还碰到了45中同行的准初三大佬winty和准高一gyfer,似乎gyfer和我一样中考压线特长生()说起来......
  • 代码随想录算法训练营第三十四天| ● 860.柠檬水找零 ● 406.根据身高重建队列 ●
    柠檬水找零 题目链接:860.柠檬水找零-力扣(LeetCode)思路:注意对于20元的情况,有两种找零方式,            头一次见到这种情况,随便加一个标准输出才能通过的样例。classSolution{public:boollemonadeChange(vector<int>&bills){in......