查找奇偶校验离群码战

时间:2019-04-29 20:09:48

标签: java outliers parity

因此,我决定去Codewars稍加梳理一下Java,然后解决这个问题:

为您提供了一个包含整数的数组(长度至少为3,但可能非常大)。除了一个整数N以外,该数组要么完全由奇数整数组成,要么完全由偶数整数组成。编写一个将数组作为参数并返回此“异常值” N的方法。

这是我的测试用例:

public class OutlierTest{
         @Test
         public void testExample() {
             int[] exampleTest1 = {2,6,8,-10,3}; 
             int[] exampleTest2 = {206847684,1056521,7,17,1901,21104421,7,1,35521,1,7781}; 
             int[] exampleTest3 = {Integer.MAX_VALUE, 0, 1};
             assertEquals(3, FindOutlier.find(exampleTest1));
             assertEquals(206847684, FindOutlier.find(exampleTest2));
             assertEquals(0, FindOutlier.find(exampleTest3));
         }}

这是我用来解决问题的代码:

            public class FindOutlier{
              static int find(int[] integers){

              int numerOfOdds = 0;
              int numberOfEvens = 0;
              int integerOutlier;


                for(int i = 0; i < integers.length ;i++){
                  if ( integers[i]%2 == 0){
                    numberOfEvens++;
                  }else{
                    numerOfOdds++;
                  }  
                }

                if ( numberOfEvens > numerOfOdds){
                  integerOutlier = 1;    
                }else{
                  integerOutlier = 0;
                }

                for(int i = 0; i < integers.length; i++){
                  if ((integers[i]%2) == integerOutlier){
                    return integers[i];
                  }
                }

              return 0;
            }}

基本上,代码的作用是遍历数组以查找离奇的奇偶校验。然后再次循环以确定外围整数。 该代码通过了所有测试用例。但是,当我尝试提交代码时,它告诉我它期望-3但得到0。

有人可以帮我在这里找到我逻辑上的问题吗? 有点令人沮丧,因为它没有告诉我其测试的数组是什么,因此我无法跟踪代码来查找错误。

不好意思,如果输入的代码不是最有效的,我可能会使用ArrayLists,但似乎CodeWars不允许使用ArrayLists ...

1 个答案:

答案 0 :(得分:2)

好吧,您的数学有一个错误:-3 % 2 == -1,因此当负奇数是异常值时,它会失败。将第二个循环更改为

for(int i = 0; i < integers.length; i++){
  if (Math.abs(integers[i]%2) == integerOutlier){
    return integers[i];
  }
}