当答案仅为负奇数时,我的函数失败(返回未定义)。 否则它会起作用。 谁能看出原因?
说明:
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this "outlier" N.
我的代码:
function findOutlier(integers) {
let binary = integers.map((int, i) => int % 2);
let count = 0;
for (let i = 0; i < binary.length; i++) {
if (binary[i] == 0)
count++;
}
if (count > 1) {
return integers[binary.indexOf(1)]
} else {
return integers[binary.indexOf(0)]
}
}
最佳答案
JavaScript %
运算符在某些情况下返回负数(当左侧为负而右侧为正时)。因此,您的 .indexOf(1)
不会在数组中找到 -1
。
您可以在 .map()
回调中使用 (i) => i & 1
直接检查最低有效位来修复它。
如果是我,我会将作业中数组可能“非常大”的警告解释为应该最小化迭代的警告。因此,我很想以不同的方式处理这个问题。一旦看到多个偶数或多个奇数,您就可以假设第一个不符合模式的数字是离群值。 (哦,我突然想到数组总是至少有 3 个元素的规定是对所需解决方案的另一个暗示:你只需要检查前 3 个元素来确定输入数组是几乎全偶数还是几乎全是奇数。)
所以也许是这样的:
function outlier(integers) {
function par(i) { return i & 1; }
let parity = par(integers[0]);
if (parity != par(integers[1])) {
if (parity == par(integers[2]))
// [0] and [2] are the true parity so [1] is the outlier
return integers[1];
// [1] and [2] are the true parity so [0] is the outlier
return integers[0];
}
return integers.find((i) => par(i) != parity);
}
关于javascript - 查找奇偶异常值 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553445/