leetcode-Single Number-136

输入一个数组,其中每个元素都出现两次,只有一个元素出现一次,求这个只出现一次的元素,要求ON

第一种做法:用set<int> 保存元素,遍历数组,如果当前元素在set中存在则删除这个元素,否则插入这个元素,最后剩下的就是所求。空间ON

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         int len=nums.size();
 5         if(len==0) return -1;
 6         if(len==1) return nums[0];
 7         set<int> s;
 8         for(int i=0;i<len;i++){
 9             if(s.count(nums[i])) s.erase(nums[i]);
10             else s.insert(nums[i]);
11         }
12         return *s.begin();
13     }
14 };

第二种做法:用位运算,异或,最后剩下的就是所求,时间ON,空间O1

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         int len=nums.size();
 5         if(len==0) return -1;
 6         int ans=0;
 7         for(int i=0;i<len;i++){
 8             ans^=nums[i];
 9         }
10         return ans;
11     }
12 };

 

posted @ 2016-09-01 15:08  0_summer  阅读(147)  评论(0编辑  收藏  举报