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?
考虑使用异或运算来实现,异或运算为两个数各bit为一一比较,如果相同置为0,如果不同置为1.
两个性质:
a^b=b^a;
0^a=a;
所以只需将数列不断的对res做异或运算,肯定可以出现(n-1)/2个0, 还剩最后一个就是要找的数。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res=0;
for (int i=0;i<nums.size();i++)
res=res^nums[i];
return res;
}
};