一、300.最长递增子序列
思想:这题的关键是dp的定义,dp[i]表示以nums[i]结尾的最长子序列长度,因为只有这样才能够进行比较,然后便是递归公式。还有就是result的设置,如果你不把长度等于1的情况排除的话,result要设置为1。本题的关键还是去理解定义,只有利用结尾才能进行比较。
二、674. 最长连续递增序列
思想:这题其实就是上面那题的进阶版,上面是不连续,但是这里是连续,整体思路也是一样,主要是dp的定义理解,然后代码感觉还简单一点。
三、718. 最长重复子数组
思想:其实这题自己都感觉理解不是特别好,然后还是从定义dp[i][j]出发,dp[i][j]表示以nums1[i-1],nums2[j-1]结尾的最长公共长度,我感觉整体思想就是算出所有的i-1,j-1结尾各种情况的那种感觉,以i-1,j-1的所有结尾公共长度算出来之后取最大的result。然后为什么不是nums1[i],nums2[j]结尾的最长公共长度是因为初始化的时候会复杂一些,为了避免这种情况所以以nums1[i-1],nums2[j-1]结尾的最长公共长度。然后是递归公式你在两个数组上要同时的向后退才行,不能只退一个,你从dp[i-1][j-1]推dp[i][j]即可,只能你同时前移一格,然后这两个值又相同,公共长度才会+1。