题目大意:线性时间+不使用额外空间,找到数组中只出现过一次的数字,其他数组都出现过两次
分析:位运算。如果可以使用额外空间,则采用哈希表记录数字出现次数即可。O(1)空间复杂度的解法需要利用位运算。
异或XOR运算:两者值不同返回1;两者值相同返回0
性质:a⊕0=a;a⊕a=0;a⊕b⊕a=(a⊕a)⊕b=0⊕b=b(满足交换律和结合律)
因此所有数进行XOR运算即可得到唯一出现的数字
代码:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0;i < nums.size();i++){
ans ^= nums[i];
}
return ans;
}
};