Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
看到线性时间我首先想到的是排序算法,想使用hashmap,后面提示说可以不使用额外的内存!!然后我就不知道怎么做了。
实在想不出来,看了网上部分答案,基本推荐使用位运算!!
^ 异或 当且仅当 的意思
a^b=b^a
(a^b)^c=a^(b^c)
而且a^a=0
因此找出最后的单个那个直接将数组内的所有数据全部异或。
#include <iostream>
using namespace std;
class Solution {
public:
int singleNumber(int A[], int n) {
if (0==n)
{
return 0;
}
int result=A[0];
for (int i=1;i<n;i++)
{
result^=A[i];
}
return result;
}
};
int main()
{
int A[]={1,11,3,11,3,12,1};
Solution* s=new Solution();
cout<<s->singleNumber(A,7);
}