查找数组中的异常值
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];
}
}
我编写了一个函数,它给出了一个包含所有奇数和一个偶数的数组,它 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];
}
}