繁体   English   中英

Java中获取时间限制超出错误

[英]Getting Time limit exceeded error in java

class Check {
    static void countOddEven(int a[], int n) {

        int countEven = 0, countOdd = 0;
        for (int item : a) {
            if (item % 2 == 0) {
                countEven++;
            }
        }

        countOdd = n - countEven;

        System.out.println(countOdd + " " + countEven);

    }
}

代码是计算数组中的偶数和奇数。 请帮助优化代码。

您的代码不正确。

如果你注定要算在偶数和奇数a ,那么你是正确计算的偶数。 如果n不等于a的长度,则您对奇数计数的计算不正确。

另一方面,(我只是在猜测)如果您要计算前n元素中的偶数和奇数,则由于对所有a进行迭代,因此您错误地计算了偶数。 同样在这种情况下,如果n远小于a的长度,则可以进行优化,仅按需要迭代前n元素。

最后,您可以尝试以下版本。 我怀疑它会为您买任何东西,但我将测量留给您了。

    int countOdd = 0;
    for (int ix = 0; ix < n; ix++) {
        countOdd += a[ix] & 1;
    }

    int countEven = n - countOdd;

诀窍是: a[ix] & 1给你的最后一位a[ix] 奇数为1,偶数为0(正或负)。 因此,我们实际上为每个奇数加1。

您应该尝试使用for循环而不是每个循环运行代码

因为,

当访问数组时,至少使用原始数据进行循环会更快。 但是,在访问集合时, foreach的速度明显快于基本的for循环的数组访问。

但是如果遇到其他错误,则在调用该方法时可能做错了一些(确保n =数组的长度)

这是带有main方法的整个代码。

class Check{
    static void countOddEven(int a[], int n){

        int countEven=0,countOdd=0;
     for(int i=0;i<n;i++)
      if(a[i]%2==0)
     {
         countEven++;
     }

     countOdd=n-countEven;

    System.out.println(countOdd+" "+countEven);

    }
    public static void main(String[] arg){
        int a[]={2,3,4,5,6};
        int n = 5;

        countOddEven(a,n);

    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM