【问题标题】:How to solve this terminated due to timeout in Java如何解决这个因Java超时而终止的问题
【发布时间】:2017-05-18 07:34:49
【问题描述】:

我可以解决这个因超时而终止的问题吗?

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

这是我的代码:

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

}

【问题讨论】:

  • 首先:不要使用冒泡排序。使用Arrays.sort。更快。
  • 如果某个答案对您有用,请继续并将其标记为已接受的答案。否则,请评论它不起作用。它可以帮助您更快地获得正确答案。不过,请确保您确实尝试了答案。

标签: java arrays sorting for-loop


【解决方案1】:

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

Arrays.sort(h)一样使用Arrays.sort

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2018-10-20
      • 2014-10-07
      相关资源
      最近更新 更多