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?
Subscribe to see which companies asked this question
题目是要找出数组中唯一的单数,这道题的思路是这样的:先排序,然后检查偶数位的下一位与当前的数值是否一致,不一致就是那个单数。也可以这样做,对数组中所有的元素做异或操作,最后异或的结果就是这个单数。
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i = 0;i<nums.size()-1;i++)
{
//cout<<nums[i]<<endl;
if((i&0x1) == 0 && nums[i] != nums[i+1])
{
return nums[i];
}
}
if((nums.size()&0x1) == 0)
return 0;
else
return nums[nums.size()-1];
}
};
//方法二:
int singleNumber(vector<int>& nums) {
int n = nums.size();
if(n<=0) return -1;
if(n == 1) return nums[0];
int result = nums[0];
for(int i=1;i<n;i++)
result^= nums[i];
return result;
}