您的位置:首页 > 其它

[136]Single Number

2015-10-13 21:05 295 查看
【题目阐述】

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?
【思路】
1.先将nums排序,然后从第一个数开始跟自己右边的数比较是否相等,不等即为答案,相等则跳过这两个从后面的继续比较。

2.这个是看了discuss的提示,利用了相同的数异或为0,不同的数异或为1的性质。

3.遍历vector,如果在map中没有找到,就加到map中,反之则说明这个数有重复,把这个数删掉。

【代码】

1.

class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++){
if(nums[i]==nums[i+1]) i++;
else return nums[i];
}
return nums[nums.size()-1];
}
};


2.

class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=nums[0];
int n=nums.size();
for(int i=1;i<n;i++){
ans^=nums[i];
}
return ans;
}
};

3.

class Solution {
public:
int singleNumber(vector<int>& nums) {
map<int,int> m;
for(int i=0;i<nums.size();i++){
if(m.find(nums[i])==m.end()){
m.insert(pair<int,int>(nums[i],nums[i]));
}
else{
m.erase(m.find(nums[i]));
}
}
return m.begin()->first;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: