[英]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.