问题是找到数组中出现奇数次的整数
例如: [1,1,1,1,1,1,10,1,1,1,1]
应返回 10
和 [5,4 ,3,2,1,5,4,3,2,10,10]
应返回 1
。
我的代码通过了除这两个之外的所有测试。我不知道为什么有人能解释一下吗?
function findOdd(A) {
var keyCounts = {};
var topKey = {};
A.forEach(function(item, val) {
keyCounts[item] = keyCounts[item] + 1 || 1;
if (keyCounts[item] % 2 !== 0) {
topKey = item;
}
});
return topKey;
}
最佳答案
您的代码失败,因为您在迭代数组时检查“奇数”计数,因此每次它找到任何新数字时,它都会覆盖topKey
.
要解决这个问题,首先计算数字,然后迭代找到的 keyCounts
对象以查找哪个是奇数:
function findOdd(A) {
let counts = A.reduce((p, n) => (p[n] = ++p[n] || 1, p), {});
return +Object.keys(counts).find(k => counts[k] % 2) || undefined;
}
关于javascript - 查找数组中出现奇数次的 int JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43230595/