最长不降子序列其实就是把每一个值都考虑一下,如果该值比我列表中最大的都大,那么就直接装进来,如果不是,那么就需要遍历列表去找到第一个大于它的值,然后将这两个值进行替换
注意:这里最后的list其实并不是严格意义上的最长不降子序列,我们也并不关心它是不是,我们只关心它的长度,因为它的长度一定是最长不降子序列的长度
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a[]=new int[n];
// 往后面遍历,获取到的新值若大于集合最后一个,那么就加上去,若小于最后一个,那么就找到第一个大于它的替换
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
}
ArrayList<Integer> list=new ArrayList<>();
list.add(a[0]);
for (int i = 1; i < a.length; i++) {
if(a[i]>list.get(list.size()-1)) {
list.add(a[i]);
}else {
for (int j = 0; j < list.size(); j++) {
if(list.get(j)>a[i]) {
list.set(j, a[i]);
break;
}
}
}
}
System.out.println(list.size());
}
}



京公网安备 11010502036488号