以LeetCode-300为例:

O(n^2)解法:

dp数组表示以i结尾的最长递增子序列的长度

class Solution {
public:int lengthOfLIS(vector<int>& nums) {const int size = nums.size();if (size == 0) { return 0; } vector<int> dp(size, 1);int res = 1;for (int i = 1; i < size; ++i) {for (int j = 0; j < i; ++j) {if (nums[j] < nums[i]) {dp[i] = max(dp[i], dp[j]+1);}}res = max (res, dp[i]);}return res;}
};

O(nlogn)解法:

tails[i]数组定义:长度为i+1最长递增子序列的最小值末尾值

以nums[4,5,6,3]为例

len = 1   :      [4], [5], [6], [3]   => tails[0] = 3
len = 2   :      [4, 5], [5, 6]       => tails[1] = 5
len = 3   :      [4, 5, 6]            => tails[2] = 6
很容易判断tails数组递增,可以应用二分法
(1) if x is larger than all tails, append it, increase the size by 1
(2) if tails[i-1] < x <= tails[i], update tails[i]
class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> tails(nums.size(),0);int size=0;for(int t=0;t<nums.size();t++){int i=0,j=size;while(i!=j){int mid=(i+j)/2;if(tails[mid]<nums[t])i=mid+1;else j=mid; // 注意这里为了取到右端的值}tails[i]=nums[t];if(i==size)size++;}return size;}
};

转载于:https://www.cnblogs.com/demian/p/6875345.html

最长递增子序列的两种解法相关推荐

  1. 最长递增子序列的三种算法

    转载自:http://qiemengdao.iteye.com/blog/1660229 最长递增子序列 问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).例如 ...

  2. 最长递增子序列的个数Python解法

    给定一个未排序的整数数组,找到最长递增子序列的个数. 列: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]. # ...

  3. 动态规划——最长上升子序列问题 两种角度及优化算法

    最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...

  4. leetcodeT14-最长公共前缀(两种解法+图解)

    文章目录 题目:最长公共前缀 法一:暴力解法 思路 图解 代码 法二:两两对比法 思路 图解 代码 题目:最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 ...

  5. 最长递增子序列_python_算法与数据结构

    周末了,实验室的网速还是不给力啊,不知道doctors都在干啥,,,最近都在做算法作业,昨天晚上看了一部电影<将爱进行到底>,刚打开电影没多久就听到了很熟悉的旋律,让我很是惊讶,这竟然就是 ...

  6. 动态规划设计方法详解最长递增子序列

    很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想. 最长递增子序列(Lon ...

  7. 【LeetCode 二分查找专项】最长递增子序列(300)(to be polished...)

    文章目录 1. 题目 1.1 示例 1.2 说明 1.3 提示 1.4 进阶 2. 解法一(动态规划) 2.1 分析 2.2 解答 2.3 复杂度 3. 解法二(二分查找) 3.1 分析 3.2 解答 ...

  8. python最大连续递增子列_最长递增子序列(LIS)解法详述

    求数组中最长递增子序列(Longest Increasing Subsequence, LIS) LIS问题是算法中的经典题目,传统的解法是使用动态规划,时间复杂度是O(n^2):改进的方法时间复杂度 ...

  9. 最长递增子序列Python解法

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6, ...

最新文章

  1. CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset
  2. ssl java 客户端_Java SSL生成客户端和服务端crt文件
  3. [python]两种编程思维--面向过程和面向对象
  4. 关于android的外文论文,关于android的外文文献.doc
  5. Luogu 3698 [CQOI2017]小Q的棋盘
  6. atom自动补全html代码,Atom - Emmet插件的使用详解(HTML/CSS代码自动补全)
  7. 免费!200块全志XR806开源鸿蒙开发板试用
  8. 8.26~8.30-广州软件所-实习工作日记
  9. 在GridView列中动态创建几个CheckBox
  10. maven scala plugin 使用教程笔记之jvmArgs配置-D参数中使用.md
  11. 2021全国研究生数学建模竞赛C题思路
  12. mysql 图像数据类型_MySQL数据类型
  13. hsql导入mysql_在测试过程中使用HSQL数据库
  14. SQL SERVER2000安装挂起问题
  15. 小白学编程必备的三大网站
  16. HttpsUtil(GET/POST/DELETE/PUT)
  17. stm32f407zgt6的pdr_on引脚怎么接
  18. 基于微信奶茶外卖点餐小程序系统设计与实现 开题报告
  19. 简单的云平台基础环境的构建(一)
  20. 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密

热门文章

  1. 友元函数、类的非静态成员函数、静态成员函数的区别
  2. python uiautomation选择list内容_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
  3. 区块链中的“智能合约”有何应用?
  4. git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改
  5. HBASE_API的应用
  6. 1094 The Largest Generation
  7. 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
  8. Python培训教程分享:有哪些值得使用的爬虫开源项目?
  9. Kafka背后公司获1.25亿融资,估值超25亿美元
  10. Spring Boot 和 testNG 和 eclipse背景色