查找数组中的异常值

Finding the outlier in an array

我编写了一个函数,它给出了一个包含所有奇数和一个偶数的数组,它 return 是一个偶数。给定一个包含所有偶数和一个奇数的数组,它 return 是一个奇数。

ex : findOutlier([2,6,8,10,3]) 将 return 3,因为它是数组中唯一的奇数

我已经让它工作了,但出于某种原因它不适用于某些大的负数?它 return 未定义而不是离群值。

这是我的代码:

function findOutlier(integers){
  let testingForOdds = true;
  let evenCounter = 0;
  let oddCounter = 0;
  for (let i = 0; i < 3; i++){
    if (integers[i] % 2 === 0){
      evenCounter = evenCounter + 1
      if (evenCounter === 2){
        testingForOdds = true;
      }
    }
    else if (integers[i] % 2 === 1){
      oddCounter = oddCounter + 1
      if (oddCounter === 2){
        testingForOdds = false;
      }
    }
  }
  if (testingForOdds){
    for (let i = 0; i < integers.length; i++){
      if (integers[i] % 2 === 1){
        return integers[i]
      }
    }
  } else {
    for (let i = 0; i < integers.length; i++){
      if (integers[i] % 2 === 0){
        return integers[i]
      }
    }
  }
}
findOutlier([-100000000007, 2602, 36]);

出于某种原因,findOutlier([-100000000007, 2602, 36]); return未定义。但是,findOutlier([2,6,8,10,3])会成功return 3.为什么会出现这种情况?

正如 Michael 指出的那样,您会遇到问题,因为 -100000000007 % 2 的计算结果为 -1。作为旁注,您可以优化逻辑以减少比较次数:

function findOutlier(arr) {
  let isEven = true;
  const a = arr[0];
  const b = arr[1];
  if (([-1, 1].includes(a % 2) && [-1, 1].includes(b % 2))) {
    isEven = false;
  } else if (!(a % 2 === 0 && b % 2 === 0)) {
    const c = arr[2];
    if (c % 2 === 1) isEven = false;
  }
  for (let i = 0; i < arr.length; i += 1) {
    const even = arr[i] % 2 === 0;
    if (even !== isEven) return arr[i];
  }
}