题目LeetCode136
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例
**输入:**nums = 2,2,1
**输出:**1
Python解法
代码示例(位运算)
python
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for num in nums:
res = res ^ num
return res
代码解释
异或运算规则:
a ^ a = 0(相同数字异或为 0)
a ^ 0 = a(数字和 0 异或等于自身)
满足交换律、结合律,运算顺序不影响结果
res ^= num 是复合赋值运算符,等同于 res = res ^ num。
示例 1:nums = 2, 2, 1
初始状态:res = 0
-
第一轮循环,
num = 2,res = 0 ^ 2 = 2 -
第二轮循环,
num = 2,res = 2 ^ 2 = 0两个相同数字抵消,结果变回 0 -
第三轮循环,
num = 1,res = 0 ^ 1 = 1
循环结束,返回 1,就是答案。
过程展示

Java解法
代码示例(位运算)
java
class Solution{
public int singleNumber(int[] nums){
int res = 0;
for(int num: nums){
res = res ^ num;
}
return res;
}
}
C++解法
代码示例(位运算)
cpp
class Solution{
public:
int singleNumber(vector<int>& nums){
int res = 0;
for(int num: nums){
res = res ^ num;
}
return res;
}
};