给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
解法:
位操作,统计所有数字各个位上数字的和,除以3取余就是落单数在这个位上的值
int singleNumberII(vector<int> &A) {
// write your code here
int buf[32] = {0};
for(int i = 0; i < A.size(); ++i) {
addBuf(A[i], buf);
}
int target = 0;
for(int i = 0; i < 32; ++i) {
int val = buf[i] % 3;
target = (val << i | target);
}
return target;
}
int addBuf(int num, int* buf) {
for(int i = 0; i < 32; ++i) {
buf[i] += (num >> i & 1);
}
}