题目 136.Single Number
原题
Given an array of integers, every element appears twice except for one. Find that single one.
理解
给出一串整形数,除了一个元素其他都出现了两次,请找出那个只出现了一次的整形数。
算法思路
最常用的想法是通过遍历计数,但题目要求在有限内存空间里使算法的时间复杂度为O(n)。
有一个巧妙的想法:利用“^”异或直接计算出只出现一次的数。因为当某数出现了两次,它们的异或值为0,而剩下的值就是只出现一次的那个。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res=nums[0];
for(int i=1;i<nums.size();i++)
{
res^=nums[i];
}
return res;
}
};