1.题目
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。
给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4
2.算法
统计整数的每一位来得到出现次数。我们知道如果每个元素重复出现三次,那么每一位出现1的次数也会是3的倍数,如果我们统计完对每一位进行取余3,那么结果中就只剩下那个出现一次的元素。
public int singleNumberII(int[] a)
{
// write your code here
int[] digits = new int[32];
for (int i = 0; i < 32; i++) //统计整数每一位出现的次数
{
for (int j = 0; j < a.length; j++)
{
digits[i] += (a[j] >> i) & 1;
}
}
int res = 0;
for (int i = 0; i < 32; i++)
{
res += (digits[i] % 3) << i;
}
return res;
}