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 };