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

时间:2017-05-18 07:34:50

标签: java arrays sorting for-loop

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

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

这是我的代码:

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);
    }

}

2 个答案:

答案 0 :(得分:0)

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

使用像Arrays.sort(h)

这样的Arrays.sort

答案 1 :(得分:0)

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

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);
        }
    }