码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-25 18:11:57      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!