美文网首页
最长递增子序列【LIS】

最长递增子序列【LIS】

作者: 涛书生 | 来源:发表于2017-08-08 08:46 被阅读0次

基准时间限制:1 秒 空间限制:131072 KB 分值: 0难度:基础题

给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)

例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。

Input

第1行:1个数N,N为序列的长度(2 <= N <= 50000)

第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)

Output

输出最长递增子序列的长度。

Input示例

8

5

1

6

8

2

4

5

10

Output示例

5

问题链接1134 最长递增子序列

问题分析:典型的计算最长递增子序列的问题。

程序说明:如果采用时间复杂度为O(n*n)的程序,是会出现TLE的。需要使用时间复杂度为O(nlogn)的程序。

AC的C++程序如下:

[cpp]view plaincopy

#include 

usingnamespacestd;

constintN = 50000;

intstack[N+1], ps;

intmain()

{

intn, val;

while(cin >> n) {

ps = 0;

for(inti=1; i<=n; i++) {

cin >> val;

intleft=1, right=ps, mid;

while(left <= right) {

mid = (left + right) / 2;

if(val > stack[mid])

left = mid + 1;

else

right = mid - 1;

}

stack[left] = val;

ps = max(ps, left);

}

cout << ps << endl;

}

return0;

}

相关文章

  • 动态规划-LIS

    LIS 最长递增子序列 如 x 的 最长递增子序列长度为5 方法一 对 x 排序(升序)生成 x_sorted 对...

  • 最长递增子序列

    最长递增子序列(Longest Increasing Subsequence,简写 LIS)是动态规划比较经典的一...

  • 最长递增子序列问题 Java

    最长递增子序列问题 LIS(longest increasing subsequence) 例如 给定一个数列,长...

  • 最长递增子序列【LIS】

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0难度:基础题 给出长度为N的数组,找出这个数组的最长...

  • 最长递增子序列(LIS)

    使用数组len来记录前i个元素最长子序列的长度,因此len[i+1]=max{1,len[k]+1},arr[i+...

  • LIS- 最长递增子序列

    一维 由于是序列,不是子串。所以dp数组回头找肯定是全部都要,就这么个思想 二维 354这个信封问题其实还是操作一...

  • LeetCode-300-最长递增子序列

    LeetCode-300-最长递增子序列 300. 最长递增子序列[https://leetcode-cn.com...

  • LintCode 最长上升子序列

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

  • LintCode 最长上升子序列

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

  • LintCode 最长上升子序列

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

网友评论

      本文标题:最长递增子序列【LIS】

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