代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组

一、300.最长递增子序列

思想:这题的关键是dp的定义,dp[i]表示以nums[i]结尾的最长子序列长度,因为只有这样才能够进行比较,然后便是递归公式。还有就是result的设置,如果你不把长度等于1的情况排除的话,result要设置为1。本题的关键还是去理解定义,只有利用结尾才能进行比较。

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组_第1张图片

 二、674. 最长连续递增序列

思想:这题其实就是上面那题的进阶版,上面是不连续,但是这里是连续,整体思路也是一样,主要是dp的定义理解,然后代码感觉还简单一点。

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组_第2张图片

 三、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。

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组_第3张图片

 

你可能感兴趣的:(动态规划,算法)