js计算一串数字最长子链长度

发布时间 2023-08-21 14:49:01作者: weimiu

假设有一串字符串"186 186 150 200 160 130 197 200";现在求它的最长升序子串长度。

let str ="186 186 150 200 160 130 197 200";
let arr = str.split(" "); // 转化为数组
let arrLeft = []; // 存储每个数左边小于其的数的个数
for(let i=0; i<arr.length; i++){
  arrLeft[i]=1; // 所有位置最小链长为1,所以可以初始设置为1
  for(let j=0; j<i; j++){
    // 如果最新的一个元素i的值大于它左边的任意位置j的值,那么把j位置链长+1和上一轮循环i处最长链长比较取最大值
    if(arr[i]>arr[j]){
      arrLeft[i] = Math.max(arrLeft[j]+1, arrLeft[i])
    }
  }
}
console.log(arrLeft); // [1, 1, 1, 2, 2, 1, 3, 4]
console.log(Math.max.apply(null, arrLeft)); // 4

上面这个是一个动态规划问题。






参考:js计算一串数字最长子链长度