程式碼隨想錄演算法訓練營第49天 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列

YuanYF6發表於2024-06-30

300.最長遞增子序列

今天開始正式子序列系列,本題是比較簡單的,感受感受一下子序列題目的思路。
影片講解:https://www.bilibili.com/video/BV1ng411J7xP
https://programmercarl.com/0300.最長上升子序列.html

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

    return max;
};
  1. 最長連續遞增序列

本題相對於昨天的動態規劃:300.最長遞增子序列 最大的區別在於“連續”。 先嚐試自己做做,感受一下區別
影片講解:https://www.bilibili.com/video/BV1bD4y1778v
https://programmercarl.com/0674.最長連續遞增序列.html

比上一題簡單
/**
 * @param {number[]} nums
 * @return {number}
 */
var findLengthOfLCIS = function(nums) {
 const dp = new Array(nums.length).fill(1);
    let max = 1;
    for (let i=1;i<nums.length;i++) {
        if (nums[i] > nums[i-1]) {
            dp[i] = dp[i-1] + 1;
        }
        if (dp[i] > max) {
            max = dp[i];
        }
    }

    return max;
};
  1. 最長重複子陣列

稍有難度,要使用二維dp陣列了
影片講解:https://www.bilibili.com/video/BV178411H7hV
https://programmercarl.com/0718.最長重複子陣列.html

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findLength = function(nums1, nums2) {
    const dp = new Array(nums1.length+1).fill(0).map(()=>new Array(nums2.length+1).fill(0));
    let max = 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] > max) {
                max = dp[i][j];
            }
        }
     }

     return max;
};

相關文章