标签:
问题:一个整数数组里除了两个数之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n), 空间复杂度为O(1).(2012百度)
#include<iostream>
using namespace std;
int findFirst1(int num)
{
int n=0;
while((num&1)==0&&n<32)
{
num=num>>1;
n++;
}
return n;
}
bool is_1(int num, int count)
{
num=num>>count;
return (num&1);
}
void FindNumsAppearOnce(int A[],int length, int &num1, int &num2)
{
if(length<2)return;
int res=0;
for (int i=0;i<length;i++)
{
res^=A[i];
}
int count=findFirst1(res);
for (int i=0;i<length;i++)
{
if (is_1(A[i], count))
{
num1^=A[i];
}
else
{
num2^=A[i];
}
}
}
int main()
{
int A[]={1, 2, 7, 8, 1, 7, 10, 5, 8, 10};
int n=sizeof(A)/sizeof(int);
int num1=0, num2=0;
FindNumsAppearOnce(A, n, num1, num2);
cout<<"num1="<<num1;
cout<<"num2="<<num2;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/Vae98Scilence/p/4456167.html