Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
class Solution {
public:
int singleNumber(int A[], int n) {
int one=0;//记录出一次的位
int two=0;//记录出现两次的为
int xthree=0;//出现三次位的取反用于清零出现三次的数
for(int i=0;i<n;i++)
{
two |= one&A[i];
one ^=A[i];
xthree=~(one&two); //one&two结果为1的位表示出现三次
one &= xthree;//再与 ones、twos进行与操作将出现了三次的位置清零。
two &= xthree;
}
return one;
}
};