如何编写一个名为isMeera的函数,如果其数组参数是Meera数组,则返回1.否则,返回0

本文关键字:返回 数组 参数 如果 否则 Meera 函数 何编写 一个 isMeera | 更新日期: 2023-09-27 18:14:11

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

如何编写一个名为isMeera的函数,如果其数组参数是Meera数组,则返回1.否则,返回0

这是一个可行的答案!

    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. 检查数组中是否至少有一个奇数。
  2. 添加一段代码,获取数组并计算数组开头有多少偶数。
  3. 现在添加一段代码,该代码获取数组并计算数组以多少偶数结束。

我认为你的代码#1工作-它看起来不错。我建议去掉你的第二个循环,把它分成两个循环——一个从数组的开头开始,向前计数,一个从末尾开始,向后计数。如果没有奇数,你可以跳过这两个循环因为你已经知道它不是一个"奇迹"。数组。

你可以做更多的优化来减少你需要访问的数组元素的数量,但现在我专注于写一个清晰的,正确的解决方案,而不一定是最优化的解决方案。

顺便说一下,所有这些基本上就是我的非常混乱的代码所做的-它计算了数组的前导偶数的数量,它计算了数组的反向副本的前导偶数的数量(即终端偶数的数量),并检查了至少存在一个奇数

终于成功了!

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