300. 最长递增子序列

105 阅读1分钟

300. 最长递增子序列

插入排序 + 动态规划 的思想

例子为[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]));