Given an array of integers, every element appears two times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
翻译:给定一个整型数组,其中除了一个元素之外,每个元素都出现两次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:
中等
分析:
由于异或运算 n XOR n = 0, n XOR 0 = n,故依次将数组中的每个元素进行异或运算即可得到最终结果。
C++代码如下:
#include<iostream>
using namespace std;
//函数声明
int FindSingleNum(int a[],size_t size);
int main()
{
int a[] = {2,3,4,3,2,1,1};
size_t size = sizeof(a)/sizeof(int);
cout<<FindSingleNum(a,size)<<endl;
return 0;
}
//函数定义
int FindSingleNum(int a[],size_t size)
{
int key = a[0];
for(size_t i=1;i<size;i++)
{
key = key^a[i];
}
return key;
}