传送门

题面挺直接的,让人第一眼看到就想用hash。但它有不让开额外的空间,所以第一时间还硬是没想出来这么做。后来看了讨论,发觉还是自己知识学的不够活啊。

这里的解法是利用位运算中的异或运算。异或具有以下特性:任意一个数与0异或还是原来的数、任意一个数与自己异或得到的一定是0。并且异或满足常规的计算率,即存在交换律。

那么对于题目给出的一串数字nums,只需要计算整个数组的异或,最后得到的就一定是那个单独的数。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for(int i : nums)
            res ^= i;
        return res;
    }
};