- 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解题思路:知道异或运算的话这题就很简单了
学习内容:
n ^ n === 0 且 n ^ 0 === n
并且,异或遵循交换律
[4,1,2,1,2] 将数字全部异或运算一遍:
4 ^ 1 ^ 2 ^ 1 ^ 2 等价于 1 ^ 1 ^ 2 ^ 2 ^ 4 => 0 ^ 0 ^ 4 => 4
出现 2 次的数字在异或中都抵消了,最后得出只出现 1 次的数
作者:hyj8
链接:https://leetcode-cn.com/problems/single-number/solution/yi-huo-de-yun-yong-shun-bian-fu-xi-wei-yun-suan-fu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
因为0异或N等于N,所以初始化ans就是数组的第一个数字,而不是从0或者1开始
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let ans = nums[0];
for(let i = 1;i<nums.length;i++)
ans = ans^nums[i];
return ans;
};