动态规划解法(时间复杂度:O(n^2))
- 使用一个数组
dp,其中dp[i]表示以nums[i]结尾的最长递增子序列的长度。 - 对于每一个
i,我们遍历之前的所有元素j,如果nums[j] < nums[i],则更新dp[i]的值为dp[j] + 1。 - 最后,
dp数组中的最大值即为整个数组的最长递增子序列长度。
var lengthOfLIS = function (nums) {
let n = nums.length
let dp = new Array(n).fill(1)
let res = 1
for (let i = 1; i < n; ++i) {
for (let j = 0; j < i; ++j) {
if (nums[j] < nums[i]) {
// 对于长度为 i 的数组,满足里面有多少个都小于 i 的
// 更新 dp 数组
dp[i] = Math.max(dp[i], dp[j] + 1)
}
}
res = Math.max(dp[i], res)
}
return res
};