/*
*一种做法是,采用一个33位的数组来保存每一bit上1的次数,然后每次模3以满3时清零。
*然而这不满足空间复杂度O(1)的要求.
*/
/*
*另一种做法如下:
*其中one记录了所有出现了模3余1次的bit,two记录的是余2的,three存储某个bit出现3次。
*~three表示当一个bit出现第3次的时候,把它清掉
*最后输出one(中那个特殊的数出现2次的话,应该输出two)
*/
int singleNumber(int A[],int N) {
int one = 0;
int two = 0;
int three = 0;
for(int i=0;i<N;i++){
two |= one & A[i];
one ^= A[i];
three = one & two;
one = ~three & one;
two = ~three & two;
}
return one;
}