我有the following question (这不是学校 - 只是代码站点练习题)而且我看不出我的解决方案缺少什么。
给定一个由N个整数组成的非空数组A。该数组包含奇数个元素,并且数组的每个元素都可以与具有相同值的另一个元素配对,但一个元素未配对。
假设:
- *N为[1..1,000,000]范围内的奇数;
- *数组A的每个元素都是[1..1,000,000,000]范围内的整数;
- *A 中除一个值外的所有值均出现偶数次。
例如:A = [9,3,9,3,9,7,9] 结果:7
官方的解决方案是使用按位异或运算符:
function solution(A) {
var agg = 0;
for(var i=0; i<A.length; i++) {
agg ^= A[i];
}
return agg;
}
我的第一直觉是跟踪 Map 查找表中每个值的出现,并返回唯一值出现一次的键。
function solution(A) {
if (A.length < 1) {return 0}
let map = new Map();
let res = A[0]
for (var x = 0; x < A.length; x++) {
if (map.has(A[x])) {
map.set(A[x], map.get(A[x]) + 1)
} else {
map.set(A[x], 1)
}
}
for ([key,value] of map.entries()) {
if (value===1) {
res = key
}
}
return res;
}
我觉得我处理了任何边缘情况,但我仍然没有通过一些测试,而且自动评分器的正确率为 66%。
最佳答案
你可以使用 Set
并检查删除是否删除了一个项目。如果不是,则将该值添加到集合中。
function check(array) {
var s = new Set;
array.forEach(v => s.delete(v) || s.add(v));
return s.values().next().value;
}
console.log(check([9, 3, 9, 7, 3, 9, 9])); // 7
关于javascript - JS : Finding unpaired elements in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51943040/