您的位置:首页 > 职场人生

程序员面试100题之三十四,找出数组中两个只出现一次的数字

2010-09-24 18:34 375 查看
#include "stdafx.h"

int find_first_1(int n)
{
int index = 1;
while( (n&1)==0 && index < 32)
{
n >>= 1;
index <<= 1;
}
return index;
}
void find(int * arr, int len, int & num1, int & num2)
{
int temp = 0;
for(int i=0;i<len;i++)
temp ^= arr[i];
unsigned int index = find_first_1(temp);

num1 = 0;
num2 = 0;
for(int i=0;i<len;i++)
{
if((arr[i]&index)==0)
num1^=arr[i];
else
num2^=arr[i];
}
}

int _tmain(int argc, _TCHAR* argv[])
{
int num1,num2;
int arr[] = {2,2,3,100,4,5,4,5};
find(arr,8,num1,num2);
printf("%d %d\n",num1,num2);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐