最长递增子序列的两种解法
以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
最长递增子序列的两种解法相关推荐
- 最长递增子序列的三种算法
转载自:http://qiemengdao.iteye.com/blog/1660229 最长递增子序列 问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).例如 ...
- 最长递增子序列的个数Python解法
给定一个未排序的整数数组,找到最长递增子序列的个数. 列: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]. # ...
- 动态规划——最长上升子序列问题 两种角度及优化算法
最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...
- leetcodeT14-最长公共前缀(两种解法+图解)
文章目录 题目:最长公共前缀 法一:暴力解法 思路 图解 代码 法二:两两对比法 思路 图解 代码 题目:最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 ...
- 最长递增子序列_python_算法与数据结构
周末了,实验室的网速还是不给力啊,不知道doctors都在干啥,,,最近都在做算法作业,昨天晚上看了一部电影<将爱进行到底>,刚打开电影没多久就听到了很熟悉的旋律,让我很是惊讶,这竟然就是 ...
- 动态规划设计方法详解最长递增子序列
很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想. 最长递增子序列(Lon ...
- 【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 解答 ...
- python最大连续递增子列_最长递增子序列(LIS)解法详述
求数组中最长递增子序列(Longest Increasing Subsequence, LIS) LIS问题是算法中的经典题目,传统的解法是使用动态规划,时间复杂度是O(n^2):改进的方法时间复杂度 ...
- 最长递增子序列Python解法
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序.例如,[3,6,2,7] 是数组 [0,3,1,6, ...
最新文章
- CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset
- ssl java 客户端_Java SSL生成客户端和服务端crt文件
- [python]两种编程思维--面向过程和面向对象
- 关于android的外文论文,关于android的外文文献.doc
- Luogu 3698 [CQOI2017]小Q的棋盘
- atom自动补全html代码,Atom - Emmet插件的使用详解(HTML/CSS代码自动补全)
- 免费!200块全志XR806开源鸿蒙开发板试用
- 8.26~8.30-广州软件所-实习工作日记
- 在GridView列中动态创建几个CheckBox
- maven scala plugin 使用教程笔记之jvmArgs配置-D参数中使用.md
- 2021全国研究生数学建模竞赛C题思路
- mysql 图像数据类型_MySQL数据类型
- hsql导入mysql_在测试过程中使用HSQL数据库
- SQL SERVER2000安装挂起问题
- 小白学编程必备的三大网站
- HttpsUtil(GET/POST/DELETE/PUT)
- stm32f407zgt6的pdr_on引脚怎么接
- 基于微信奶茶外卖点餐小程序系统设计与实现 开题报告
- 简单的云平台基础环境的构建(一)
- 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密
热门文章
- 友元函数、类的非静态成员函数、静态成员函数的区别
- python uiautomation选择list内容_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
- 区块链中的“智能合约”有何应用?
- git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改
- HBASE_API的应用
- 1094 The Largest Generation
- 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
- Python培训教程分享:有哪些值得使用的爬虫开源项目?
- Kafka背后公司获1.25亿融资,估值超25亿美元
- Spring Boot 和 testNG 和 eclipse背景色