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不要的话初始化会出问题,死活搞不好,就按代码随想录的这个方法来。