题目:EPI
数组中,除某一个数字x之外,其他数字都出现三次,而x出现一次,找出x。
推广一下,所有其他数字出现N(N>=2)次,而一个数字出现1次都可以用这种解法来推导出这个出现1次的数字。
具体解析请看【白话经典算法系列之十七】 数组中只出现一次的数。
int Find_Number_Once(const vector<int> &A)
{
if(A.empty())
throw new exception;
int bit[32]={0};//全部初始化为零
//int bit[32]; 初始化不为零!!!
for(int i=0;i<A.size();i++)
{
for(int j=0;j<32;j++)
{
if(A[i] & (1<<j) )
bit[j]++;
}
}
int res=0;
for(int i=0;i<32;i++)
{
if(bit[i]%3!=0)
res=res | (1<<i);
}
return res;
}
EPI书上P275写了一段改进后的代码(不知所云),如下所示: