最长递增子序列数组

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]

 

posted @ 2024-07-19 18:22  小不点灬  阅读(10)  评论(0)    收藏  举报