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

36 阅读1分钟

300.最长递增子序列

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var lengthOfLIS = function(nums) {
    var dp = new Array(nums.length).fill(1);
    dp[0] =1;
    for(let i=1;i<nums.length;i++){
        for(let j=0;j<i;j++){
            if(nums[j] <nums[i]){
                    dp[i] = Math.max(dp[j] +1 ,dp[i]);
                  
            }
           
        }
    }
    var result=1;
    for(let i=0;i<nums.length;i++){
        result = Math.max(result,dp[i]);
    }
    return result;
};

674. 最长连续递增序列

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

/**
 * @param {number[]} nums
 * @return {number}
 */
var findLengthOfLCIS = function(nums) {
    var dp=new Array(nums.length).fill(1);
    var start =0;
     for(let i = 0; i < nums.length - 1; i++) {
    if(nums[i+1] > nums[i]) {
            dp[i+1] = dp[i]+ 1;
    }
     }
    var result =1;
    for(let i=0;i<nums.length;i++){
        result = Math.max(result,dp[i]);
    }
    return result;
};

718. 最长重复子数组

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var findLength = function(nums1, nums2) {
    var dp = new Array(nums1.length+1).fill(0).map(()=>new Array(nums2.length+1).fill(0));
    var result =0;
    for(let i=1;i<=nums1.length;i++){
        for(let j=1;j<=nums2.length;j++){
            if(nums1[i-1] ===nums2[j-1]){
                dp[i][j] = dp[i-1][j-1] + 1;
                if(dp[i][j] >result){
                    result = dp[i][j]
                }
            }
        }
    }
    return result;
};