跟本题无关,需要仔细阅读的文章,还没阅读https://leetcode-cn.com/problems/linked-list-cycle/solution/yi-wen-gao-ding-chang-jian-de-lian-biao-wen-ti-h-2/
题目描述: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例1:
1 | 输入:nums = [2,2,1] |
示例2:
1 | 输入:nums = [4,1,2,1,2] |
示例3:
1 | 输入:nums = [1] |
题解方法一:异或运算
解题思路:
- 异或运算有个重要的性质,两个相同数字异或为 000 ,即对于任意整数 aaa 有 a⊕a=0 。因此,若将 nums 中所有数字执行异或运算,留下的结果则为 出现一次的数字 x。
举例
: 5+31
2
3
4 101 (x 的二进制表示)
^ 011 (num 的二进制表示)
------
110 (异或的结果)
代码实现如下
1
2
3
4
5
6
7function singleNumber(nums) {
let x = 0;
for (let num of nums) { // 1. 遍历 nums 执行异或运算
x ^= num;
}
return x; // 2. 返回出现一次的数字 x
}
参考链接: