美文网首页
js求任意数内的最长上升子序列

js求任意数内的最长上升子序列

作者: 人类进化又没带我 | 来源:发表于2021-04-25 14:57 被阅读0次

记一次前端组内分享随笔:

let arr = []
while (arr.length !== 1000) { // 取一千个数
    let a = random(0, 2000)
    if (arr.join().indexOf(a) === -1) { // 如果已经有了 就不加进去了
        arr.push(a)
    }
}
function random(a, b) { // 随机函数  随机生成a和b之间的一个数
    return Math.round(Math.random() * (b - a) + a)
}
console.log(`0-2000以内随机的1000个数字:${arr}」`)
console.log(`取出最长上升子序列:${lis(arr)}}}`)
console.log(`最长上升子序列长度:${lis(arr).length}`)

function lis(seq) {
    const valueToMax = {}
    let len = seq.length
    for (let i = 0; i < len; i++) {
        valueToMax[seq[i]] = 1
    }
    let i = len - 1
    let last = seq[i]
    let prev = seq[i - 1]
    while (typeof prev !== 'undefined') {
        let j = i
        while (j < len) {
            last = seq[j]
            if (prev < last) {
                const currentMax = valueToMax[last] + 1
                valueToMax[prev] =
                    valueToMax[prev] !== 1 ? valueToMax[prev] > currentMax ? valueToMax[prev] : currentMax : currentMax
            }
            j++
        }
        i--
        last = seq[i]
        prev = seq[i - 1]
    }

    const lis = []
    i = 1
    while (--len >= 0) {
        const n = seq[len]
        if (valueToMax[n] === i) {
            i++
            lis.unshift(len)
        }
    }
    return lis
}

运行效果如下:


image.png

相关文章

  • js求任意数内的最长上升子序列

    记一次前端组内分享随笔: 运行效果如下:

  • 最长上升子序列

    最长上升子序列(Longest Increasing Subsequence) 最长上升子序列方案数

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • 动态规划(六)

    最长上升子序列 给定一个整数序列,求,其中最长上升子序列长度。(不要求子序列一定是连续的,只要相对位置不变即可)[...

  • BZOJ1669: [Usaco2006 Oct]Hungry

    题意给定长度为n的序列,求最长上升子序列复杂度O(nlogn)题解网上有很多关于最长上升子序列nlogn的求法,我...

  • LintCode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义:最长上升子序列...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问...

  • 76. 最长上升子序列

    描述 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子...

  • 76. 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问题是在...

网友评论

      本文标题:js求任意数内的最长上升子序列

      本文链接:https://www.haomeiwen.com/subject/njmdrltx.html