位运算的应用----找出落单的数

基本描述:一个数组里面除了某一个数字之外,其他的数字都出现了两次。设计一个算法去找出这个只出现了一次的数字。

要是没学过位运算的话,估计又想着去暴力枚举了,不合适,数据量大了会很麻烦的,还是用位运算。因为数组中只有一个元素是不重复两次的,用0去一次与数组元素进行异或,出现两次的数异或之后为0,只出现了一次的数便求出来了,这样做时间和空间都比暴力节省不少。不多逼逼,放代码。

#include <iostream>
#include<stdlib.h>
using namespace std;
int main()
{
	int n = 1001;
	int *a = new int[n];
	for (int i = 0; i <n ; i+=2)//在数组的前1000个内存空间中存数,都为奇数
	{
		a[i] = i + 1;
		a[i + 1] = a[i];
		//cin >> a[i];
	}
	a[n-1] = 1;
	for (int i = 0; i < n; i++)
		cout << a[i] << " ";
	cout << endl;
	int x = 0;
	for (int i = 0; i < n; i++)
		x = x ^ a[i];//核心
	cout << "唯一落单的数:" << x << endl;
	return 0;
}

这里因为要生成1000个两两重复的数,懒得去手输,直接for赋值了,这样生成的数都是奇数,在最后一个单元去赋一个偶数,这样最后这个数就变成了唯一不重复的数,用0去依次做异或运算便可得到结果。
位运算的应用----找出落单的数