我正在尝试用Java解决this问题,但它给了我一个错误。原因是我无法在运行时每秒处理处理2.5MB的输入数据。我想知道有没有办法加快我的代码?
public class Main {
final static int size = 5000;
static int[] result = new int[size];
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int k = input.nextInt();
int divided = 0;
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
try {
while (n-- > 0) {
result[n] = Integer.parseInt(bi.readLine());
if (result[n] % k == 0)
divided++;
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(divided);
input.close();
}
}
答案 0 :(得分:1)
result
数组有什么用途?您只是将其编入索引以存储刚刚解析的数字,然后立即再次检查其可分性。摆脱数组,然后做出循环:
while(n-- > 0)
if (Integer.parseInt(bi.readLine()) % k == 0)
divided++;
<小时/> 您可能希望在没有
BufferedReader
的情况下比较其性能,因为缓冲实际上可能会减慢它的速度。
Scanner input = new Scanner(System.in);
final int n = input.nextInt(), k = input.nextInt();
InputStreamReader in = new InputStreamReader(System.in);
System.out.println(
IntStream.generate(()->Integer.parseInt(in.readLine()))
.limit(n)
.parallel()
.filter(a->a%k==0)
.count());