只出现一次的数字

Given a non-empty 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?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4
 题意:给定一个非空数组,其中有一个数只出现了一次,而其它的数都出现了两次,找出只出现了一次的数
 
 思路一:利用哈希集合,遍历数组,如果没有出现过,就插入到集合中,如果出现过,那么就把这个数删除,这样遍历完数组中所有的数,哈希集合中剩下的那个就是唯一出现了一次的数
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        unordered_set<int> numlist;
        for(int i=0;i<nums.size();i++)
        {
            if(numlist.count(nums[i])!=0) numlist.erase(nums[i]);
            else(numlist.insert(nums[i]));
        }
        auto it = numlist.begin(); 
        return *it;  
    }
};

思路二:对数组排序,两个一组依次进行比较,直到有不相等的两个数,两个数中的第一个就是那个只出现了一次的数

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