1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java最长递增子序列_JAVA最长递增子序列

java最长递增子序列_JAVA最长递增子序列

时间:2021-01-03 14:32:43

相关推荐

java最长递增子序列_JAVA最长递增子序列

问题描述  LIS(Longest Increasing Subsequence,最长递增子序列):给出一个序 列a1,a2,a3,a4,a5,a6,a7…an,求它的一个子序列(设为s1,s2,…sn),使得这个 子序列满足这样的性质,s1

最长递增子序列

实例分析 1 7 3 5 9 4 8 1

最长递增子序列

 算法设计  设b[i]是在a[i]为单调递增子序列最后一个元素时,所得最长单调递增子序列 的长度

  

 

i)j1a[i]if(a[j] 1max(b[j]) 1)if(i 1

b[i]

最长递增子序列

 算法设计  a数组存储原始数据  b数组存储对应最长上升子序列长度

i 1 2 3 4 5 6 7 a[i] 1 7 3 5 9 4 8 b[i]初始值 1 1 1 1 1 1 1 b[i] 1 2 2 3 4 3 4

最长序列长度

1 7 3 5 9 4 8

i 1 2 3 4 5 6 7``

a[i] 1 7 3 5 9 4 8

b[i] 1 2 2 3 4 3 4

pre[i] 0 1 1 3 4 3 6

package book;

import java.util.Scanner;

public class 最长公共子序列 {

static int n;

static int a[];//原始数据

static int b[];//存放最长的序列长度

static int c[];//

static int pre[];//存放前一个数据编号

static int max;

static int lab;//存储最长子序列的最后一个元素的位置

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

n=sc.nextInt();

a=new int[n+1];

b=new int[n+1];

c=new int[n+1];

pre=new int[n+1];

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

a[i]=sc.nextInt();

}

slove();

System.out.printf("%d\n",max);

//输出数列O(n)

for(int i=1;i<=max;i++) { System.out.printf("%d,",c[i]); }

}

private static void slove() {

b[1]=1;//第一个数字本身长度为1;

for(int i=2;i<=n;i++) {

max=0;

for(int j=i-1;j>=1;j--) {

if(a[j]max) {

max=b[j];//要这个数的关键是

pre[i]=j;

}

}

b[i]=max+1;

}

max=b[1];

for(int i=2;i<=n;i++) {

if(b[i]>max) {

max=b[i];

lab=i;

}

}

int i=lab;

int num=max;

int j=max;

//将a数组复制到c数组

while(num>0) {

c[j]=a[i];

j--;

i=pre[i];

num--;

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。