求整数数组里的两个非重复整数

问题:一个整数数组里除了两个数之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为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;
}

  

原文地址:https://www.cnblogs.com/Vae1990Silence/p/4456167.html