最长递增子序列
大约 1 分钟
最长递增子序列
题目描述
给定一个无序的整数数组 nums
,找到其中最长严格递增子序列的长度。
解题步骤
为了找到最长递增子序列的长度,我们可以使用动态规划的思想来解决问题。
定义状态:我们可以将问题转化为以每个元素为结尾的最长递增子序列的长度。令
dp[i]
表示以第i
个元素为结尾的最长递增子序列的长度。初始状态:根据题目的约束,每个元素本身可以作为一个递增子序列,因此初始状态为
dp[i] = 1
。状态转移方程:对于第
i
个元素,我们需要找到所有在它之前的元素中小于它的元素nums[j]
,并且取它们的最大递增子序列长度加上1
。因此,状态转移方程为dp[i] = max(dp[i], dp[j] + 1)
,其中0 <= j < i
。最终解:问题的解即为所有
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);
}