本文参考:http://zhedahht.blog.163.com/blog/static/25411174201283084246412/
http://blog.csdn.net/wypblog/article/details/8032898
题目:一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,找出这三个数中的任一个。
比如数组元素为【1, 2,4,5,6,4,2】,只有1,5,6这三个数字是唯一出现的,我们只需要输出1,5,6中的一个就行。
解题思路:
在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了。这个数组元素个数一定为奇数,而且那要求的三个数一定不可能每一bit位都相同,所以我们可以根据第一个不同的bit位,可以把那三个数字分出来,而且可以推出三个数肯定可以分到两组不同的数组里面去,基于这样的思路就可以找出这三个不同的数字。
下面是找到数组中一个不同的数字:
//返回数组中一个不重复的数
int FindSingleNumber(int arr[],int len)
{
invaluedInput = false;
if(NULL == arr || len<3)
{
invaluedInput = true;
return 0;
}
int tmpA = 0;
int tmpB = 0;
int countA = 0;
int countB = 0;
int i = 0;
int j = 0;
for(i=0; i<32; i++)
{
tmpA = tmpB = countA = countB = 0;
//根据第i位的不同,将数组中的元素分为2部分,tmpA、tmpB分别异或两部分元素
for(j=0; j<le