题目:只出现一次的数字

题目要求的是线性时间复杂度以及常量额外空间,所以像哈希表之类的解法都不能使用

这里使用到的是**异或(XOR)**,它的性质是:

1.任何数与0异或得到这个数本身

2.任何数与自身异或得到0

3.异或运算满足结合律,即_a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b_

通过以上性质,只需要将数组内的所有元素放在同一个异或运算式中,就可以将所有相同的数字进行组合(结果为零),又因为性质一,所以最后得到的结果一定就是落单的数字

1int singleNumber(vector<int>& nums)
2{
3    int res = 0;
4    for(auto num : nums) res ^= num;
5    return res;
6}