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

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

}

  

你可能感兴趣的:(数组)