由于所有数字都出现奇数次,
所以无法直接使用异或操作。考虑到计算机使用二进制存储数字,可以建立一个32
位的数字,统计每一位1出现的次数,如果一个整数出现了三次,那么三个0或者三
个1对3取余都为0,对每个数的对应位都加起来对3取余,剩下的就是 Single
Number 。
int singleNumber(int* nums, int numsSize) {
int * bit = calloc(32, sizeof(int));
int result = 0;
for(int i = 0; i < 32; i++){
for(int j = 0; j < numsSize;j++){
bit[i] += nums[j]>>i&0x1;
bit[i] %= 3;
}
result |= bit[i]<<i;
}
return result;
}