题目
给定一个整型数组,除一个元素仅出现一次之外,其余每个元素都出现两次(三次),试着找出这个元素。
分析
此类题目,若每个元素出现i次,如果将问题的视角放在数据位上来看的话,实际上就是除那个“single number”所在的bits外,(每个bit上出现数据的次数)%i==0。
代码
1.两次:
a.常规思路:
class Solution {
public:
int singleNumber(int A[], int n) {
int res=0;
for(int i=0;i<32;i++){
int count=0;
for(int j=0;j<n;j++){
if((A[j]>>i)&1 == 1)
count++;
}
res+=(count%2)<<i;
}
return res;
}
};
b.Bright Way:异或,a^a=0, 0^a=a(此方法适用于每个数出现偶数次的情况)
class Solution {
public:
int singleNumber(int A[], int n) {
int num = 0;
for(int i=0;i<n;i++){
num^=A[i];
}
return num;
}
};
2.三次:
class Solution {
public:
int singleNumber(int A[], int n) {
int res=0;
for(int i=0;i<32;i++){
int count=0;
for(int j=0;j<n;j++){
if((A[j]>>i)&1 == 1)
count++;
}
res+=(count%3)<<i;
}
return res;
}
};