javascript - 从数组中获取第一个唯一元素
问题描述
我正在解决 LeetCode 上的问题。即单号。
您需要创建一个函数,该函数将数组作为输入并返回数组中唯一不重复的元素。该数组将只包含一个这样的元素。
[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;
}
};
但是在提交结果后它说
运行时间:68 毫秒,比单号 JavaScript 在线提交的72.96%快。
我很想知道解决这个问题的更有效方法。
解决方案
非重复单个数字的经典解决方案(其中数字是整数,重复的数字恰好重复一次)只是计算所有它们的 x 或:
var singleNumber = function(nums) {
let res = 0;
for(let x of nums) res ^= x; // shorthand for res = res ^ x
return res;
};
请注意,显式基于索引的for
循环或 a for-of
or.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
方法更快。
推荐阅读
- html - 在暗模式下控制 Gmail 中的颜色交换
- java - 如何使用 Java Spring 的泛型类型实现存储库模式
- reactjs - 在控制台中使用 react-hooks useEffect 警告 React Apollo
- python - pands.read_json dtype 对象到整数/数字
- linux - 列表文件中的格式错误的条目 1
- laravel - 您可能需要一个额外的加载器来处理这些加载器的结果
- biopython - 如何从 FASTA 文件中进行多个成对对齐并打印相似度百分比?
- python - python中的.xlsx下载问题
- python - 如何根据另一个重复值将字符串从一行附加到另一行
- java - 如何使用 java KeyStroke 暂时关闭自动重复