最长递增子序列数组
function LTS(nums) { if (nums.length === 0) { return []; } const results = [[nums[0]]]; // 初始化结果数组,包含第一个元素作为起始递增子序列 // 遍历除第一个元素外的所有元素 for (let i = 1; i < nums.length; i++) { const n = nums[i]; _update(n); // 更新递增子序列数组 } // 更新递增子序列数组的函数 function _update(n) { // 从后往前遍历结果数组 for (let j = results.length - 1; j >= 0; j--) { const line = results[j]; const tail = line[line.length - 1]; if (n > tail) { results.push([...line, n]); // 如果当前元素大于当前序列的最后一个元素,则将当前元素添加到该序列末尾 return; } } results[0] = [n]; // 否则当前元素开始一个新的递增子序列 } // 找到最长的递增子序列 let maxLengthIndex = 0; for (let k = 1; k < results.length; k++) { if (results[k].length > results[maxLengthIndex].length) { maxLengthIndex = k; } } return results[maxLengthIndex]; // 返回最长的递增子序列 } console.log(LTS([4, 5, 11, 2, 7, 3, 6, 9])); // 输出: [4, 5, 7, 9]
不停学习,热爱是源源不断的动力。

浙公网安备 33010602011771号