Leetcode-只出现一次的数字

30.只出现一次的数字

题目内容:

Leetcode-只出现一次的数字

代码及思路:

1.第一个想到的是利用hash表

class Solution {
public:
    int singleNumber(vector<int>& nums) {
       	unordered_map<int, int> count;
        if(nums.size()==0)
            return 0;
	    for (int i = 0; i < nums.size(); i++)
	    {
		    count[nums[i]]++;
	    }
	    int index = 0;
	    while (index < nums.size())
	    {
		    if (count[nums[index]] == 1)
			    return nums[index];
		    index++;
	    }
        return 0;
    }
};

2.利用异或的方式也很有意思,因为设一个int a,a^0=a,a^a=0。因此如果数组当中仅有一个数字只出现一次,其余数字都出现两次,因此在异或的过程中会被抵消最后为0,那么最终整个数据异或的结果就是只出现一次的那个数字。(该种方法内存消耗少了非常多)

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