题目:
一个整型数组里除了1个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。
思路:
强调数字出现的次数,而且是偶数次。这时候可以考虑利用位运算的 "异或" 实现。
2个相同的数异或=0
因此,将数组所有元素异或得到的结果即为只出现一次的那个数。
贴代码:
#include <iostream>
#include <vector>
using namespace std;
// 找出数组中只出现一次的数
void FindNumsAppearOnce(vector<int> data, int* num)
{
if (data.size() == 0)
{
return;
}
*num = 0;
for(unsigned int i = 0; i < data.size(); ++i)
{
*num ^= data[i];
}
}
int main(void)
{
int a[] = {1,1,2,2,3};
vector<int> v(a, a + 5);
int num;
FindNumsAppearOnceVer1(v, &num);
cout<<"num = "<<num<<endl;
return 0;
}