原题描述
思路点拨
在解决此题前,我们先来了解一下异或运算(⊕)的两个性质:
- a⊕0=a ; 任何数与0异或都等于其本身
- a⊕a=0 ; 两个相等的数异或为0
由此我们可以推导出: x⊕a⊕a=x;
根据这个x⊕a⊕a=x性质,我们可以利用两个相同的数字异或来消除彼此,因此我们把此题所有元素异或一遍,出现两次的数全部互相消除了,最后的结果一定是只出现一次的数字
源码解析
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret=0;
for(int num : nums)//遍历nums
{
ret=ret^num;//利用异或消除两个相等的数
}
return ret;
}
};