我查阅了一篇文章,按照他的算法写了一遍,然后发现运行超时了。请问具体哪里有问题?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
String[] strs=br.readLine().split(" ");
int[] datas=new int[N];
for(int i=0;i<N;i++) {
datas[i]=Integer.parseInt(strs[i]);
}
Arrays.sort(datas);
int E=0;
for(int i=N;i>=0;i--) {
int count=0;//超过N英里的天数
for(int j=datas.length-1;j>=0;j--) {
if(datas[j]>i) {
count++;
}else {
break;
}
}
if(count>=i) {
E=i;
break;
}
}
System.out.print(E);
}
}
//这个是我查阅的那篇文章的代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int[] a = new int[N];
int E=0;
for (int i = 0; i < N; i++) {
a[i] = scan.nextInt();
}
Arrays.sort(a);
for (int i = N; i >=0; i--) {//i是遍历的英里数,j是索引,用来遍历数组
int count=0;//超过i英里的天数
for(int j=N-1;j>=0;j--){
if(a[j]>i){
count++;
}
else{
break;//如果a[j]没有超过i,说明大于i英里的已经遍历完了(因为数组已经sort过了),直接跳出去
}
}
if(count>=i){//一旦天数大于等于了英里数,就说明这个英里数可以作为一个E,就把他赋值给E
E=i;
break;
}//不用担心E不是所有中的最大值,因为i是递增的
}//注意这里无论是i还是j都是倒着遍历的,可以保证第一次找到的E就是最大值
System.out.print(E);
}
}
//这个是我写的代码
请问bufferedreader和Scanner在读取数据时到底有什么不同?IO Exception是什么?放在这里有什么用?我查阅了一些资料后还是不理解,希望得到大家的帮助!
又:我查阅的那篇文章的链接:https://blog.csdn.net/haofandedaima/article/details/89421978?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164282219816781685367584%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164282219816781685367584&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-89421978.first_rank_v2_pc_rank_v29&utm_term=pat1060%E7%88%B1%E4%B8%81%E9%A1%BF%E6%95%B0+java&spm=1018.2226.3001.4187