题目:
在一个数组中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字
思路:
如果还是和上一个题一样用异或运算的话是没有用的,但我么依旧可以用位运算的思路来解题。
如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除。我们把数组中所有数字的二进制表示的每一位都加起来。如果某一位的和能被3整除,那么那个只出现一次的数字二进制表示中对应的那一位是0,否则就是1.
代码实现:
int singleNumber(int* nums, int numsSize){
int ans=0;
int bit=0;
for(int i=31;i>=0;i--){
for(int j=0;j<numsSize;j++){
bit+=nums[j]>>i&1;
}
ans=ans*2+bit%3;
bit=0;
}
return ans;
}