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?
给定一个数组,数组中只有一个数出现了一次,其他数都出现了两次,要求在O(n)时间复杂度,O(1)空间复杂度,找出数组中只出现一次的数。
思路,使用异或操作,异或操作有如下性质(穷举法可以证明):
相同的数字异或结果为0
任何数和0异或结果不变
所以这道题遍历数组对所有的数进行异或操作后,两两相同的数字结果都为0,最终结果就是出现了一次的数。
AC code:
class Solution {
public:
int singleNumber(int A[], int n)
{
int num=0;
for(int i=0;i<n;i++)
num^=A[i];
return num;
}
};