剑指 Offer 56 - II. 数组中数字出现的次数 II
题目描述
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
解答
class Solution {
/**
位运算
考虑数字的二进制形式,对于出现三次的数字,各 二进制出现的次数都是3的倍数。
因此,统计所有数字的各二进制中1的出现次数,并对3求余,结果则为只出现一次的数字
*/
public int singleNumber(int[] nums) {
int[] times = new int[31]; //int型默认值为0
for(int i = 0;i < nums.length;i++){
int md = nums[i];
int j = 0;
while(md > 0){
times[j] += (md & 1);
md >>= 1;
j++;
}
}
for(int i = 0;i < 31;i++){
times[i] = times[i] % 3;
}
int res = 0;
for(int i = 30;i >= 0;i--){
res <<= 1;
res = res | times[i];
}
return res;
}
}