数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法找到x。
方法一:
#include <iostream>
#include <string.h>
using namespace std;
int fun(int a[], int n)
{
int bitCounts[32];
memset(bitCounts, 0, 32*sizeof(int));
for (int i = 0; i < 32; i++)
{
int factor = (1 << i);
for (int j = 0; j < n; j++)
{
if (factor & a[j])
{
bitCounts[i]++;
}
}
}
int result = 0;
for (int i = 0; i < 32; i++)
{
if (bitCounts[i] % 3)
{
result += (1 << i);
}
}
return result;
}
方法二:
int fun(int a[], int n)
{
int ones = 0;
int twos = 0;
for (int i = 0; i < n; i++)
{
ones = (ones ^ a[i]) & (~twos);
twos = (twos ^ a[i]) & (~ones);
}
return ones;
}