javascript - 从数组中获取第一个唯一元素

标签 javascript arrays algorithm

我在 LeetCode 上解决问题。即Single Number .

您需要创建一个函数,该函数将数组作为输入并返回数组中唯一不重复的元素。该数组将只包含一个这样的元素。

[2,2,1] //1
[2,3,5,2,3] //5

我已经用下面的代码解决了这个问题。

var singleNumber = function(nums) {
    let obj = {}  
    for(let a of nums){
        obj[a] = obj[a] + 1 || 1;
    }
    for(let key in obj){
        if(obj[key] === 1) return key;
    }
};

然而在提交结果后它说

Runtime: 68 ms, faster than 72.96% of JavaScript online submissions for Single Number.

我很想知道什么是解决这个问题更有效的方法。

最佳答案

非重复单个数字(数字是整数,重复的数字只重复一次)的经典解决方案只是计算所有数字的 x 或:

var singleNumber = function(nums) {
    let res = 0;
    for(let x of nums) res ^= x; // shorthand for res = res ^ x
    return res;
};

请注意,如果显式基于索引的 for 循环或 for-of.forEach 更快或更慢取决于具体Javascript 引擎。例如:

var singleNumber = function(nums) {
    let res = 0;
    for(let i=0,n=nums.length; i<n; i++) res ^= nums[i];
    return res;
};

可能for ... of 方法更快。

关于javascript - 从数组中获取第一个唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878337/

相关文章:

javascript - 带有 fs 和 setInterval 的 Node js

javascript - 单击选项时如何关闭菜单?简单的 JS 但我做不到 :/

c++ - 将 char* 数组传递给函数

c++ - 从 C++ 中的文本文件读取时忽略字符

algorithm - 固定数量的 "()"对的括号数

javascript - jquery查找并替换url中的最后一个参数

javascript - 通过在 JavaScript 中连接 2 个字符串来设置 'calc()' 值不起作用

arrays - 快速将数组保存到 Parse 并从中检索

algorithm - 如何将 1200 万交互网络分解为子网络

c - 3n+1算法