插入排序 + 动态规划 的思想
例子为[10,2,3,5]它的下表分别为0 1 2 3,下表用i表示,同时在循环内部使用0 ~ i-1的循环,其中下表用j表示
当i=2 且 j=1时,2<3 于是有形成一次最长子序列 为2
当i=3 且 j=1时,2<5 于是有形成一次最长子序列 为2,又因为当i=3 且 j=2时,3<5于是,形成最长子序列最优值为3,覆盖了之前形成的dp[3]的值
var lengthOfLIS = function (nums) {
var len = nums.length;
if (len == 0) {
return 0;
}
var dp = new Array(len).fill(1);
var maxLen = 1;
for (var i = 1; i < len; i++) {
for (var j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
maxLen = Math.max(maxLen, dp[i]);
}
return maxLen;
};
console.log(lengthOfLIS([10, 2, 3, 5]));