最长递增子序列LIS

原创 2018年04月15日 17:18:41

1.复杂度O(n^2)算法

  lis[i]保存的是以arr[i]为结尾的数组序列的最长递增子序列长度

例如,arr {10,22,9,33,21,50,41,60,80} 

 LIS的长度是6和 LIS为{10,22,33,50,60,80}。

记忆化搜索
int list(int arr[],int n)  
{  
    int i,j,max;  
    max = 0;  
    for(i=1;i<=n;i++)  
        lis[i] = 1;  
      
    for(i=2;i<=n;i++)  
    {  
        for(j=1;j<i;j++)  
        {  
            if(arr[i]>arr[j] && lis[i]<lis[j]+1)  
                lis[i] = lis[j] + 1;  
        }  
    }  
      
    for(i=1;i<=n;i++)  
        if(max < lis[i])  
            max = lis[i];  
      
    return max;  
}  

2.复杂度O(nlogn)算法

  用栈模拟,二分优化查找进行替换

int stack[10010];
int lis(int arr[],int n)
{
    int i,top,mid,low,high;
    top = 0;
    stack[0] = -1;
    for(i=0;i<n;i++)
    {
        if(arr[i]>stack[top])
            stack[++top] = arr[i];
        else
        {
            low = 1;
            high = top;
            while(low <= high)
            {
                mid = (low + high)/2;
                if(arr[i] > stack[mid])
                    low = mid + 1;
                else
                    high = mid - 1;
            }
            stack[low] = arr[i];
        }
    }
    return top;
}

最长递增子序列(LIS)-动态规划

问题题目:[拦截导弹]思路这个题目的本质是最长递增子序列。首先给出序列的定义,要区别子串。 在一个已知序列:{x1,x2,...xn}\left\{ x_{1},x_{2},...x_{n} \ri...
  • Kang_TJU
  • Kang_TJU
  • 2016-11-23 16:03:09
  • 319

LIS(最长递增子序列)和LCS(最长公共子序列)的总结

LIS(最长递增子序列)和LCS(最长公共子序列)的总结 最长公共子序列(LCS):O(n^2) 两个for循环让两个字符串按位的匹配:i in range(1, len1) j in rang...
  • u012997373
  • u012997373
  • 2014-10-29 16:08:54
  • 813

最长递增子序列LIS的O(nlogn)的求法

最长递增子序列(Longest Increasing Subsequence)是指n个数的序列的最长单调递增子序列。比如,A = [1,3,6,7,9,4,10,5,6]的LIS是1 3 6 7 9 ...
  • u012505432
  • u012505432
  • 2016-08-17 10:57:06
  • 832

最长递增子序列(LIS)的O(NlogN)打印算法

题目: 求一个一维数组arr[n]中的最长递增子序列的长度,如在序列1,5,8,3,6,7中,最长递增子序列长度为4 (即1,3,6,7)。 方法一:一般的DP方法(O(N^2)) 像LC...
  • synapse7
  • synapse7
  • 2013-09-17 09:39:02
  • 4630

Java-LIS最长递增子序列(动态规划实现)

问题:找出给定数组最长且单调递增的子序列。         解决思路:原数组arr的子序列顺序保持不变,而且排序后的array本身是递增的。这样得到的两个序列的子序列一定是递增的序列。要求出数组ar...
  • qq_30507287
  • qq_30507287
  • 2016-10-16 19:41:12
  • 1416

动态规划(篇2)最长递增子序列(LIS)

最长增加子序列(LIS)问题是找到给定序列的最长子序列的长度,使得子序列的所有元素以增加的顺序排序。例如,{10,22,9,33,21,50,41,60,80 }的LIS的长度为6,LIS为 {10,...
  • u013309870
  • u013309870
  • 2017-03-14 10:09:40
  • 584

算法设计作业LIS(最长递增子序列)

/*  功能说明: 给定一个非负整数数组,找出最长递增子序列.         作者: hfjiang  完成日期: 2005-3-13*/#includeusing namespace std;#d...
  • jiangredsheep
  • jiangredsheep
  • 2005-03-13 20:36:00
  • 1652

4、最长递增子序列LIS--Java代码

求最长递增子序列,并打印所有最长子序列,直接贴代码: package algorithm.basic; import java.util.ArrayList; import java.util.Li...
  • baolibin528
  • baolibin528
  • 2016-08-25 13:16:10
  • 464

最长递增子序列LIS递归算法

#include using namespace std; int minStep,n,*arr,*record,*lis,index,recordMax,lisCount; /* 1.minSte...
  • lc0817
  • lc0817
  • 2015-03-16 11:13:53
  • 1861

lis 最长递增序列

3) 动态规划算法         实际上这是一道很典型的动态规划问题。我们假设a[0]....a[i-1] 有一个最长递增子序列,其长度f(i-1)       那么对于a[0]....
  • cncnlg
  • cncnlg
  • 2014-10-18 19:00:41
  • 300
收藏助手
不良信息举报
您举报文章:最长递增子序列LIS
举报原因:
原因补充:

(最多只允许输入30个字)