代码随想录训练营:1.打家劫舍、2.打家劫舍II、3.打家劫舍III 4.买卖股票的最佳时机、5.买卖股票的最佳时机II、6.买卖股票的最佳时机III、7.买卖股票的最佳时机IV。

1.打家劫舍:代码随想录

        1.最基本的打家劫舍问题,最值得注意的就是递推公式,我们要考虑若两家连在一起不能偷的情况,由此推出其递推公式,以及初始条件的建立。

        2.在刷题过程中遇到的问题:for循环中判断i,应该是i<nums.size(),而不是<=。因为i取不到nums.size(),一定注意!!!刚就是这个原因报错。

2.打家劫舍II:代码随想录

        1.在写robrange的逻辑的时候,里面的for循环要根据函数中的start和end来判定,不能继续用nums.size()相关的来替代。

        2.本题就相当于多了一环判断的逻辑,主要还是要把打家劫舍的逻辑搞懂,判断逻辑其实好说。

3.打家劫舍III:代码随想录

        1.注意,我们只能从根入口进入房屋,不代表我们一定要抢根入口的房屋。(这题目前还弄不太懂,之后再做。)

4.买股票的最佳时机:代码随想录

        1.本题第一个重点我觉得是对于dp[i][0]和dp[i][1]的理解,dp[i][0]表示第i天持股所得的最多现金,按照卡哥的说法,本来的手持现金是0,只要买了股票,手持现金就为负数。那么所有的   dp[i][0]都是负数,这个要理解。而对于dp[i][1]来说,这是不持股后所得的最大现金,因为不持股,就像递推公式中的两种状态,第i-1天就不持股,或者是第i天把股票卖了。

        2.第二个重点是对于递推公式的理解,这个可以和dp[i][0]和dp[i][1]的理解相互进行理解。    

         “第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]”这句话理解:比如我昨天买入了股票,我手上只欠了昨天买股票所欠的钱,无论今天或者以后的股价如何,都与昨天手上已经持有股份的我无关。

        3.c++创建数组的时候,未赋初值的值自动为0.

4.买股票的最佳时机II:代码随想录

        1.此题和上一题唯一的区别就是递推公式的一点不同。

        2.for循环中,i是<len,而不是<=len。

5.买卖股票的最佳时机III:代码随想录

        1.本题要理解的是,在某一天会有四个状态,而我们需要各个状态的递推公式。

        2.状态1,3可以理解成某天是第一次拥有股票的状态和第二次拥有股票的状态,这样更好理解

需要注意:dp[i][1],表示的是第i天,买入股票的状态,并不是说一定要第i天买入股票,这是很多同学容易陷入的误区。这句话。

6.买卖股票的最佳时机IV:代码随想录

        1.这题相当于是把上一题的普遍规律抽出来,然后形成一个固定的套路。

        2.在初始化的过程中,因为状态是从0开始的所以j<2*k,(可以举个栗子试试)把所有为奇数状态的初始化。若可以买卖两次,即k=2,则共有0~2k,共2k+1种状态

        3.注意嵌套循环中,第二个for循环判断条件为j<2*k-1,即最大值为2*k-2,因为下标最大为2k,当j=2k-2的时候就能操作后两个状态了。

        4.在写递推公式的时候,要细心,谨记第j+1个状态是由第j个状态推出,第j+2个状态是由第j+1个状态推出来的。(自己写代码的时候,把第j+2个状态写成由第j个状态推出的,写错了)

        5.这道题目一定要有2*k个,下标从0开始到2*k-1,若只弄2*k-1个状态,状态0不要的话初始化会出问题,死活搞不好,就按代码随想录的这个方法来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值