题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
import java.util.Scanner; import java.util.Arrays; import java.io.InputStream; import java.io.PrintStream; import java.io.IOException; public class Main { public static void main(String[] args) { InputStream inps=System.in; Scanner in = new Scanner(inps); String temp=in.nextLine(); int n=Integer.parseInt(temp); temp=in.nextLine(); try{ inps.close(); }catch(IOException e){ e.printStackTrace(); } in.close(); String arr[]=temp.split(" "); int height[]=new int[n]; int i=0; for(;i<n;++i){ height[i]=Integer.parseInt(arr[i]); } i=maxStep(height,n); PrintStream pt=System.out; pt.println(i); pt.close(); } public static int maxStep(int arr[],int n){ int i=0; int j=0; int a[]=new int[n]; int len[]=new int[n]; int index=0; a[j++]=arr[0]; len[0]=1; for(i=1;i<n;++i){ if(arr[i]>a[j-1]){ a[j++]=arr[i]; len[i]=j; }else{ index=Arrays.binarySearch(a,0,j,arr[i]); if(index<0){ index=-index-1; a[index]=arr[i]; } len[i]=index+1; } } return j; } }