只出现一次的数字 I
原理讲解
此类问题可通过排序解决,但最高效的方法是按位异或(XOR)。
按位异或原理: 比较二进制位,相同为 0,相异为 1。若两个数字完全相同,异或结果为 0;利用此性质可消除成对出现的数字。
代码展示
class Solution {
public:
int singleNumber(vector<int>& nums) {
int tmp = 0;
for (int i = 0; i < nums.size(); ++i) {
tmp ^= nums[i];
}
return tmp;
}
};
当然也可以使用范围 for 循环或迭代器遍历:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int tmp = 0;
for (auto e : nums) {
tmp ^= e;
}
return tmp;
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
int tmp = 0;
auto it = nums.begin();
while (it != nums.()) {
tmp ^= (*it);
++it;
}
tmp;
}
};


