我正在解决这个question。
这是我的代码:
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] t = new int[n];
int count = 0;
for (int i = 0; i < n; i++) {
t[i] = sc.nextInt();
if (t[i] % k == 0) {
count++;
}
}
System.out.println(count);
}
}
但是当我提交它时,它会超时。请尽可能地帮助我优化它。
实施例
输入:
7 3
1
51
966369
7
9
999996
11
输出:
4
他们说:
您应该能够处理 每个至少2.5MB的输入数据 第二个在运行时。
修改后的代码
谢谢大家......我修改了我的代码,但它确实有用......这里是......
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int k = Integer.parseInt(input[1]);
int count = 0;
for (int i = 0; i < n; i++) {
if (Integer.parseInt(br.readLine()) % k == 0) {
count++;
}
}
System.out.println(count);
}
问候
shahensha
答案 0 :(得分:1)
这个怎么样?
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int count = 0;
for (int i = 0; i < n; i++) {
if (sc.nextInt() % k == 0) {
count++;
}
}
System.out.println(count);
答案 1 :(得分:1)
您可以考虑阅读大块输入,然后从那里获取数字。
其他变化是,您可以使用Integer.parseInt()
而不是Scanner.nextInt()
,虽然我不知道每个的详细信息,但有些事情告诉我Scanner版本执行更多计算以了解输入是否是正确。另一种方法是自己转换数字(尽管Integer.parseInt应该足够快)
创建一个示例输入,并测量您的代码,在这里和那里稍微改变一下,看看有什么区别。
衡量,衡量!
答案 2 :(得分:1)
根据limc的解决方案,这可能会稍快一些,但BufferedReader
应该更快。
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int count = 0;
while (true) {
try {
if (sc.nextInt() % k == 0) {
count++;
}
} catch (NoSuchElementException e) {
break;
}
}
System.out.println(count);
}
}
答案 3 :(得分:0)
BufferedReader
应该比Scanner
更快。您需要自己解析所有内容,并且根据您的实现情况,可能会更糟。