如何解决这个问题由于 Java 中的超时而终止



我可以解决由于超时而终止的问题吗?

我的意思是如何降低复杂性或不需要的代码以解决问题?

这是我的代码:

public class Solution {
public static void main(String[] args) {
int i,n,hit,count=0,p=0,t,tmp,j;
int h[]=new int[100000];
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
hit=sc.nextInt();
t=sc.nextInt();
for(i=0;i<n;i++){
h[i]=sc.nextInt();
}
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(h[i]>h[j]){
tmp=h[i];
h[i]=h[j];
h[j]=tmp;
}
}
}
for(i=1;i<=t;i++){
h[p]-=hit;
if(h[p]<=0){
count++;
p++;
}
}
System.out.println(count);
}
}

由于我不知道问题陈述,我唯一能建议的就是始终避免气泡排序。它的复杂性是O(n^2),可能这就是阻碍你时间要求的原因。

使用Arrays.sort,如Arrays.sort(h)

我能看到的唯一问题是您需要先导入扫描仪才能使用它。当我运行您提供的代码时,它给了我超时,因为它找不到扫描仪,但是当我导入扫描仪时,它运行良好,所以我假设这与您得到的超时错误相同。将此语句放在代码的开头:

import java.util.Scanner;

完成的代码应如下所示:

import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
int i,n,hit,count=0,p=0,t,tmp,j;
int h[]=new int[100000];
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
hit=sc.nextInt();
t=sc.nextInt();
for(i=0;i<n;i++){
h[i]=sc.nextInt();
}
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(h[i]>h[j]){
tmp=h[i];
h[i]=h[j];
h[j]=tmp;
}
}
}
for(i=1;i<=t;i++){
h[p]-=hit;
if(h[p]<=0){
count++;
p++;
}
}
System.out.println(count);
}
}

最新更新