传统的LIS复杂度为O(n*n)每次都要寻找比当前点小的所有在它之前的点

O(nlogn)的则是每遍历到一个点,都将该点放在大于等于(大于也可以)该点value的第一个点的位置。更改该点的value而不进行移动。如果该点比数组中的最后一个点大则整个数组的长度加一。保证数组lis[i]表示的是长度为i的子序列,末尾即最后一个元素的最小值。最后数组的大小就是最长上升子序列的大小

特注此代码表示严格上升的,非严格上升条件应改为

a[i] >= lis[len - 1]

核心代码

for(int i = 0; i < n; i ++)
{if(len == 0 ||a[i] > lis[len - 1]){lis[len] = a[i];len ++;}else{p = lower_bound(lis,lis +len,a[i]) - lis;lis[p] = a[i];}
}

或者

因为该点大于lis数组中的最后一个值lower_bound的返回值就是数组的长度len

for(int i = 0; i < n; i ++)
{p = lower_bound(lis,lis +len,a[i]) - lis;lis[p] = a[i];if(p == len)len ++;
}

nlogn的LIS(最长上升子序列)算法讲解相关推荐

  1. LCS最长公共子序列和LIS最长上升子序列——例题剖析

    一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...

  2. 算法设计 - LCS 最长公共子序列最长公共子串 LIS 最长递增子序列

    出处 http://segmentfault.com/blog/exploring/ 本章讲解: 1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度: 2. 与之类似但不 ...

  3. JavaScript实现LongestIncreasingSubsequence最长递增子序列算法(附完整源码)

    JavaScript实现LongestIncreasingSubsequence最长递增子序列算法(附完整源码) dpLongestIncreasingSubsequence.js完整源代码 dpLo ...

  4. JavaScript实现longestCommonSubsequence最长公共子序列算法(附完整源码)

    JavaScript实现longestCommonSubsequence最长公共子序列算法(附完整源码) longestCommonSubsequence.js完整源代码 longestCommonS ...

  5. 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...

    在前面我讲解了如何通过最长公共子串来求解两个文本的相似度问题,但它有一定缺陷,举个例子,看下面的两个字符串 我爱吃小青菜和各种鲜水果. 我很爱吃青菜与各样水果. 上面两个字符串,如果通过计算子串来求相 ...

  6. 北京大学郭炜-最长上升子序列 动态规划讲解

    北京大学郭炜-最长上升子序列 动态规划讲解 问题原型: 解题思路: 找子问题,题目要求我们求1~n的最长上升子序列的长度,那我们想一想:1-2个元素的最长上升子序列的长度是多少,第1个元素的最长上升子 ...

  7. lis最长上升子序列o(nlogn)优化

    LIS的暴力算法 我们知道,LIS(最长上升子序列,最长下降子序列,最长不上升子序列,最长不下降子序列)如果按照最初得方法做,我们设置的状态f[i]表示i结尾的最长LIS的长度,在枚举每一个数的时候都 ...

  8. LIS 最长递增子序列

    前言 LIS 即 longest increasing string,最长递增子序列,可以是不连续的.例如 2 3 5 2 3 4 5 的最长递增子序列为{2,3,4,5},长度为4. 两种方法可以求 ...

  9. LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)

    1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...

  10. LIS 最长递增子序列问题

    一,    最长递增子序列问题的描述 设L=<a1,a2,-,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,-,akm>,其中k1< ...

最新文章

  1. Spring Boot项目利用MyBatis Generator进行数据层代码自动生成
  2. 【字符串】最长回文子串 ( 蛮力算法 )
  3. 服务器点对点直连,点对点网络连接怎么建立有什么作用
  4. 深入到系统组件是否白盒测试_2019年系统集成项目管理工程师:第一章 信息化知识(三)要点?...
  5. 平衡小车卡尔曼滤波算法
  6. Redis五种数据类型介绍
  7. pcie16x能插1x的卡嘛?_5G手机插4G卡,在没有5G信号的地方,跟4G手机的网速一样吗?...
  8. Android下的数据储存方式(三)
  9. nginx优化_安全方面的优化
  10. CImage类 from http://blog.sina.com.cn/s/blog_487547aa0100an6k.html
  11. vue.js关于循环出来多个input并让每个input后的修改按钮控制其值
  12. 【入门】QSS基础入门笔记
  13. 在xp系统上安装java8
  14. 本人有51SAP培训机构全套SAP培训课程教材和视频, 欲转手
  15. html标签选择器只认最后一个,选择某类的最后一个元素——CSS3伪类选择器走过的坑...
  16. 信贷反欺诈的常用手段:名单库、专家策略、机器学习
  17. 快要圣诞节啦,快去给小伙伴们分享漂亮的圣诞树吧
  18. 计算机锁定不能强制选项无法关机,Win10无法关机只能按电源强制关机的解决方法...
  19. 软件项目管理 3.5.敏捷生存期模型
  20. 数据库的实例化操作——员工信息的查询——简单表查询(二)

热门文章

  1. 香港物理服务器和香港云服务器有什么区别?
  2. Java游戏开发需要熟练掌握
  3. 《FreeSWITCH: VoIP实战》:FreeSWITCH 初步
  4. CSS 通用样式总结
  5. c语言程序设计电子信息,电子信息类专业C语言程序设计实践教学探讨
  6. 对于ISP的http会话劫持,各位看看这个文章,更换DNS纯属蛋疼
  7. numpy.random用法
  8. Java 数组在内存中的存储 数组的常见操作
  9. 部分优秀博客主链接汇总(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM AI 深度/机器学习 opencv nlp)
  10. 学UI设计用什么电脑比较好?深度分析!