一、题目描述
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
二、思路
考虑到每个重复元素均出现两次,有什么办法可以让出现两次的元素抵消呢?按位异或。
关于异或运算的性质:
1. 任何数和 0 做异或运算,结果还是它本身,即 a ^ 0=a⊕0=a。
2. 任何数与自身异或都为0,而且异或运算满足交换律和结合律,所以相同的数都抵消了,只剩唯一出现的数
则用0与数组内所有元素做异或就能得到只出现一次的元素了
三、代码展示
var singleNumber = function(nums) {
let num = 0
for(let item of nums) {
num ^= item
}
return num
}