Meera数组被定义为一个包含至少一个奇数的数组,并以相同数量的偶数开始和结束。
所以{4,8,6,3,2,9,8,11,8,13,12,12,6}是一个Meera数组,因为它以三个偶数开头,以三个偶数结束包含至少一个奇数。 数组{2,4,6,8,6}不是Meera数组,因为它不包含奇数。 数组{2,8,7,10,-4,6}不是Meera数组,因为它以两个偶数开始,但以三个偶数结束。 这是我的尝试,但无法得到结果。请帮我 !提前谢谢!
public static int isMeera(int [] a){
boolean hasOdd = false;
int firstEven = 0;
int lastEven = 0;
boolean firstCountEnd = false;
boolean lastCountEnd = false;
for(int i = 0; i<a.length; i++){
if (a[i]%2 == 1)
{
hasOdd = true;
break;
}
}
for (int j = 0; j<a.length; j++){
if(a[(a.length - 1) - j] % 2 == 1){
firstCountEnd = true;
if ((!firstCountEnd) && (a[j]%2==0)){
firstEven ++;
}
}
if(a[(a.length - 1) - j] % 2 == 1){
lastCountEnd = true;
if ((!lastCountEnd) && (a[j]%2==0)){
lastEven ++;
}
}
}
if (hasOdd && firstEven == lastEven)
return 1;
return 0;
}
答案 0 :(得分:1)
这是一个有效的答案!
public static bool IsMirra(int[] l1)
{
return((l1.Select(l=>l%(1<<1)==(1>>1)?'l':'1').TakeWhile(l=>(l^(((1<<1)+(1<<(1^1))<<((1<<1)<<1))+(1<<(1^1))))!=(l^l)).Count()-l1.Select(l=>l%(1<<1)==(1>>1)?'l':'1').Reverse().TakeWhile(l=>(l^(((1<<1)+(1<<(1^1))<<((1<<1)<<1))+(1<<(1^1))))!=(l^l)).Count())==(1^1))&&(l1.Select(l=>l%(1<<1)==(1>>1)?'l':'1').Any(l=>(l^(((1<<1)+(1<<(1^1))<<((1<<1)<<1))+(1<<(1^1))))==(l^l)));
}
如果你真的想要一个清晰的答案而不仅仅是一个功能性的答案,我会很乐意帮助你一旦付出努力并自己捅了一下。
好的,既然你实际上已经展示了一些努力并发布了你所拥有的东西,这里有一些提示:
我认为#1的代码有效 - 看起来没问题。我建议摆脱你所拥有的第二个循环并将其分成两个 - 一个从数组的开始开始并向前计数,一个从结束开始并向后计数。如果没有奇数,你可以跳过这两个循环,因为你已经知道它不是“mirra”数组。
您可以采取更多优化来减少需要访问的阵列元素的数量,但是现在我专注于编写清晰,正确的解决方案,而不一定是最优化的解决方案。
顺便说一句,所有这些基本上都是我非常混淆的代码所做的 - 它计算了数组的前导偶数的数量,它计算了数组反转副本的前导偶数(即数字)终端偶数),并检查是否存在至少一个奇数。
答案 1 :(得分:0)
最后它成功运作!
public static int isMeera(int [] a){
boolean hasOdd = false;
int firstEven = 0;
int lastEven = 0;
boolean firstCountEnd = false;
boolean lastCountEnd = false;
for(int i = 0; i<a.length; i++){
if (a[i]%2 == 1)
{
hasOdd = true;
break;
}
}
if (!hasOdd)
return 0;
for (int j = 0; j<a.length; j++){
if(a[j]%2==1)
firstCountEnd=true;
if(!firstCountEnd && a[j]%2==0)
firstEven++;
if(a[(a.length-1)-j]%2==1)
lastCountEnd=true;
if(!lastCountEnd && a[(a.length-1)-j]%2==0)
lastEven++;
}
//System.out.println(firstEven +" " +lastEven);
if (hasOdd && firstEven == lastEven)
return 1;
return 0;
}