题目链接:
思路:
-
需要尤为注意的一点是 题目 所说的递增子序列,指的是 可以不连续的 子序列
-
我们采用 dp 算法,当前位置 dp[i] 的最优值(最大值),需要是遍历,i 位置前面的 其他元素,看是否 nums[i] 大于 nums[j] ,并拿到 j 位置的 最优值 dp[j] +1 作为 dp[i] 的值,这个值需要遍历前面的所有位置的最优解,不断迭代,拿到当前位置的最优解
代码:
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var lengthOfLIS = function (nums) {
if (!nums.length) return 0
if (nums.length <= 1) return 1;
let res = 1, dp = new Array(nums.length + 10).fill(1);
for (let i = 1; i < nums.length; i++) {
for (let j = i - 1; j >= 0; j--) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[j] + 1, dp[i])
}
}
res = Math.max(res, dp[i])
}
return res
};