只出现一次的数字(js实现,LeetCode136)
如果不考虑时间空间复杂度的话这道题可以使用暴力求解,但是题目要求必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间,所以这里用到了一个方法:异或运算a⊕a=0
这里值得注意的是异或运算可以使用结合律,即(a⊕b)⊕c=a⊕(b⊕c)(类比加法)
利用异或运算 a⊕a=0 的性质,我们可以用异或来「消除」所有出现了两次的元素,最后剩下的一定是只出现一次的元素。所以一次遍历即可求得结果
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let ans = 0;
for(let i = 0; i < nums.length; i++){
ans ^= nums[i];
}
return ans;
};