跳至主要內容

最长递增子序列

linwu大约 1 分钟

最长递增子序列

题目描述

给定一个无序的整数数组 nums,找到其中最长严格递增子序列的长度。

解题步骤

为了找到最长递增子序列的长度,我们可以使用动态规划的思想来解决问题。

  1. 定义状态:我们可以将问题转化为以每个元素为结尾的最长递增子序列的长度。令 dp[i] 表示以第 i 个元素为结尾的最长递增子序列的长度。

  2. 初始状态:根据题目的约束,每个元素本身可以作为一个递增子序列,因此初始状态为 dp[i] = 1

  3. 状态转移方程:对于第 i 个元素,我们需要找到所有在它之前的元素中小于它的元素 nums[j],并且取它们的最大递增子序列长度加上 1。因此,状态转移方程为 dp[i] = max(dp[i], dp[j] + 1),其中 0 <= j < i

  4. 最终解:问题的解即为所有 dp[i] 中的最大值。

下面是使用动态规划解决最长递增子序列问题的算法框架:

function lengthOfLIS(nums) {
  const n = nums.length;
  const dp = new Array(n).fill(1);

  for (let i = 1; i < n; i++) {
    for (let j = 0; j < i; j++) {
      if (nums[i] > nums[j]) {
        dp[i] = Math.max(dp[i], dp[j] + 1);
      }
    }
  }

  return Math.max(...dp);
}

关注公众号

和小伙伴们一起学习

加入技术交流群

扫描二维码 备注加群