javascript - JS : Finding unpaired elements in an array

标签 javascript

我有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/

相关文章:

javascript - 如何发出 jsonp 请求

javascript - 从 URL 中获取图像 byte/base64

javascript - Canvas - 使用 php 或 js 保存到图像

javascript - Ajax 无法从 php 加载数据到 div

javascript - $.post(...) 无法识别 JSON 主体

javascript - Node.js 集群尽可能频繁地处理数据

javascript - 函数不会返回 q -Javascript

javascript - 在 bootstrap 4 nav 上滚动添加类

javascript - 比较 D3.js 中的两个时间对象

javascript - 显示多级Json中的key