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

时间:2019-06-29 14:16:48

标签: java optimization

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

    }
}

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

2 个答案:

答案 0 :(得分:1)

您输入的代码不正确。

如果要计算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。

答案 1 :(得分:0)

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

因为

访问数组时,至少使用原始数据 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);

    }
}