java_ day9
目标:Java web开发
问题:最长上升子序列
import java.util.*;
class Main{
static Scanner sc=new Scanner(System.in);
static final int N=100010;
//写法一:
static int a[]=new int[N],q[]=new int[N];
//写法二:
// static int[] a=new int[N],q=new int[N];
public static void main(String args[]){
int n=sc.nextInt();
for(int i=0;i<n;i++) a[i]=sc.nextInt();
q[1]=a[0];
int len=1;
for(int i=0;i<n;i++){
int l=1,r=len;
while(l<r){//排队,最适合的在最前,并实时更新
int mid=l+r>>1;
if(q[mid]<a[i]) l=mid+1;
else r=mid;
}
if(q[r]<a[i]) q[++len]=a[i];
else q[r]=a[i];
}
System.out.println(len);
}
}
很用心地在水了。。。

浙公网安备 33010602011771号