2024-09-18 15:08:22 +08:00

43 lines
1.2 KiB
JavaScript

function getSequence(arr) {
let maxLength = 0; // 记录最长递增子序列的长度
let longetSeq = []; // 记录最长递增子序列
/**
*
* @param {*} index 列表的下标
* @param {*} subSeq 当前递增子序列
*/
function findSubsequence(index, subSeq) {
let currentNum = arr[index]; // 当前元素
// 先把之前的递增子序列展开,再加上当前元素
let newSeq = [...subSeq, currentNum]; // 新的递增子序列
// 遍历下标之后的内容
for (let i = index + 1; i < arr.length; i++) {
// 遍历当前下标之后的元素时,发现有比当前元素大的元素
if (arr[i] > currentNum) {
findSubsequence(i, newSeq);
}
}
// 每一次递归结束后,就会得到一个新的递增子序列
// 相当于找到了所有的递增子序列
// console.log("newSeq:", newSeq);
if (newSeq.length > maxLength) {
maxLength = newSeq.length;
longetSeq = newSeq;
}
}
for (let i = 0; i < arr.length; i++) {
findSubsequence(i, []);
}
return longetSeq;
}
const list = [2, 1, 5, 3, 6, 4, 8, 9, 7];
const result = getSequence(list);
console.log(result);