美文网首页
longest increasing subsequence n

longest increasing subsequence n

作者: 走出幻觉走向成熟 | 来源:发表于2016-06-09 23:01 被阅读82次

    O(n^2)

    算法逻辑:贪心 + 二分搜索

    数据定义补充:
    开一个栈,将a[0]入栈,每次取栈顶元素top和读到的元素ai做比较,如果a[i]> top 则将a[i]入栈;如果a[i]<= top则二分查找栈中的比a[i]大的第1个数,并用a[i]替换它。 最长序列长度即为栈的大小top。

    这是很好理解的,对于x和y,如果x < y且stack[y] < stack[x],用stack[x]替换stack[y],此时的最长序列长度没有改变,但序列继续变长的''潜力''增大了。
    举例:原序列为1,5,8,3,6,7
    开始1,5,8相继入栈,此时读到3,用3替换5,得到1,3,8;
    再读6,用6替换8,得到1,3,6;
    再读7,得到最终栈为1,3,6,7。最长递增子序列为长度4。

    相关文章

      网友评论

          本文标题:longest increasing subsequence n

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