您的位置:首页 > 其它

微软100题(61)找出数组中两个只出现一次的数字

2015-06-02 21:55 381 查看
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

思路:两个相同的数字异或等于量,那么所有数字异或就是这两个数字异或的和
这个异或的和肯定有一位不为零,而且这一位 那两个数字该位上 不一样
void FindTheTwoOnceNum(vector<int> data)
{
	int n = data.size();
	int answer1 = 0;
	int answer2 = 0;
	int temp=0;
	int j;
	for (int i=0;i<n;++i)
		temp ^= data[i];
	for (j=0;j<32;j++)
		if(temp>>j & 0x1)
			break;
	for (int i=0;i<n;++i)
	{
		if(data[i]>>j & 0x1)
			answer1 ^= data[i];
		else
			answer2 ^= data[i];
	}
	cout<<"the two once numbers are"<<answer1<<" "<<answer2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: