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