您的位置:首页 > 其它

数组中两个只出现一次的数字

2014-09-02 10:39 232 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

算法复杂度O(n) 时间复杂度O(1)

#include <iostream>
using namespace std;
void findnum(int* data,int len,int& num1,int &num2)
{
if (data==NULL)
return ;
int i=0;
int finalnum=0;//保存异或结果
int indexbit=0;//记录第一位是1的位置
//求所有的序列异或的结果,保存在finalnum变量
while(i<len)
{
finalnum=data[i]^finalnum;
i++;
}
while((finalnum&1)==0&&indexbit<=8*sizeof(int))
{
indexbit++;//1的位置左移一位
finalnum=finalnum>>1;//异或结果右移一位
}
finalnum=1<<indexbit;//保存1左移indexbit位的数值
for(int i=0;i<len;i++)
{
if(finalnum&data[i])
num1=num1^data[i];
else
num2=num2^data[i];
}

/*
int tempnum=finalnum;
while((tempnum&1)==0&&indexbit<=8*sizeof(int))
{
indexbit++;
tempnum=tempnum>>1;
}
tempnum=1<<indexbit;
for (int i=0;i<len;i++)
{
if(tempnum&data[i])
num1=num1^data[i];
else
num2=num2^data[i];
}
*/
}
int main()
{
int num1=0;
int num2=0;
int a[8]={1,2,2,1,4,5,6,6};
findnum(a,8,num1,num2);
cout<<num1<<" "<<num2<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: