问题:已知一个特殊数组,数组中除去一个元素只出现一次之外,其他元素都出现了两次,现在要找出这个唯一一个只出现了一次的数据元素,并将其打印出来。
分析:利用异或运算的特殊性。例如A异或B得到C,C再与B异或则又会得到A,那么依照这个规律,将整个数组逐个元素异或,最后得到的结果既是该数组中仅出现了一次的元素。
以已知data[]数组为例:
#include <iostream>
using namespace std;
int data[20] = {1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 9, 8};
int FindNumber(int data[],int length)
{
if(length <2)
return -1;
int opXor = 0, i = 0;
while(i <length)
opXor ^= data[i++];
return opXor;
}
int main()
{
int result = FindNumber(data, 20);
cout << result;
return 0;
}