异或运算交换律以及结合律。
概念
如果我们对 0 和二进制位做 XOR 运算,得到的仍然是这个二进制位
a \oplus 0 = aa⊕0=a
如果我们对相同的二进制位做 XOR 运算,返回的结果是 0
a \oplus a = 0a⊕a=0
XOR 满足交换律和结合律
a \oplus b \oplus a = (a \oplus a) \oplus b = 0 \oplus b = ba⊕b⊕a=(a⊕a)⊕b=0⊕b=b
所以我们只需要将所有的数进行 XOR 操作,得到那个唯一的数字。
class Solution {
public:
int singleNumber(vector<int>& nums) {
if(nums.size() <= 1) return nums[0];
int k = nums[0];
for(int i = 1; i < nums.size(); i++) k = nums[i] ^ k;
return k;
}
};