题目:
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
方法一:集合Set
var singleNumber = function (nums){
let set = new Set();
for(let i = 0;i<nums.length;i++){
//set中有当前值,则不是唯一值项,将该值删除;
if(set.has(nums[i])){
set.delete(nums[i]);
//set中没有该值,则将值放入set中
}else{
set.add(nums[i])
}
}
//最终set中只剩下那个唯一值项
let res = ''
set.forEach(item=>{
res = item;
})
return res;
}
方法二:异或运算
- 任何数和自身做异或运算 -> 等于0;
- 任何数和0做异或运算 -> 等于该数自身;
var singleNumber = function (nums) {
let res = ''
for(let i = 0;i<nums.length;i++){
res ^= nums[i]
}
return res;
}