只出现一次的数字
利用异或位运算的性质。
a
⊕
0
=
a
a\oplus 0=a
a⊕0=a,
0
0
0和任何数异或都不改变原来的值
a
⊕
a
=
0
a\oplus a=0
a⊕a=0,自己和自己异或为0。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int t = 0;
for(int x:nums){
t ^= x;
}
return t;
}
};
137. 只出现一次的数字 II
恕本菜鸡只看懂了官方题解的方法二。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0; i < 32; i++) {
int total = 0;
for(int x:nums) {
total += (x>>i) & 1;
}
// 其他数字的对这一位的贡献都抵消了
if(total%3) {
ans |= 1<<i;
}
}
return ans;
}
};