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);
    }
}

很用心地在水了。。。

posted @ 2021-07-13 21:59  zhuangzhongxu  阅读(37)  评论(0)    收藏  举报