前端 JS 经典:最长递增子序列

简介: 前端 JS 经典:最长递增子序列

前言:vue 的 deep 算法用到了这个算法。什么是最长递增子序列,就是给你一个数组 [4,5,1,2,7,3,6,9],算出它们的最长递增子序列 [1,2,3,6,9]。

function LIS(nums) {
  if (nums.length === 0) {
    return [];
  }
  let results = [[nums[0]]];
  for (let i = 1; i < nums.length; i++) {
    const n = nums[i];
    _update(n);
  }
  function _update(n) {
    for (let i = results.length - 1; i >= 0; i--) {
      const line = results[i];
      const tail = line[line.length - 1];
      if (n > tail) {
        results[i + 1] = [...line, n];
        break;
      } else if (n < tail && i === 0) {
        results[i] = [n];
      }
    }
  }
  return results[results.length - 1];
}
目录
相关文章
|
2天前
|
JavaScript 前端开发 CDN
前端 JS 经典:package.json 属性详解
前端 JS 经典:package.json 属性详解
7 1
|
2天前
|
前端开发 JavaScript 测试技术
前端 JS 经典:Promise 详解
前端 JS 经典:Promise 详解
6 1
|
1天前
|
JavaScript 前端开发 API
JS案例:前端Iframe及Worker通信解决思路
JS案例:前端Iframe及Worker通信解决思路
|
1天前
|
JavaScript 前端开发
JS进阶篇(前端面试题整合)(三)
JS进阶篇(前端面试题整合)(三)
|
1天前
|
前端开发 JavaScript
前端 JS 经典:箭头函数的意义
前端 JS 经典:箭头函数的意义
3 0
|
1天前
|
前端开发 JavaScript
前端 JS 经典:变量交换
前端 JS 经典:变量交换
4 0
|
1天前
|
前端开发 JavaScript
前端 JS 经典:函数签名
前端 JS 经典:函数签名
5 0
|
1天前
|
前端开发 JavaScript
前端 JS 经典:数字变化动画
前端 JS 经典:数字变化动画
4 0
|
1天前
|
前端开发 JavaScript
前端 JS 经典:访问器成员
前端 JS 经典:访问器成员
5 0
|
1天前
|
前端开发 JavaScript 开发者
前端 JS 经典:通用性函数封装思路
前端 JS 经典:通用性函数封装思路
10 0