Leetcode-只出现一次的数字
30.只出现一次的数字
题目内容:
代码及思路:
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;
}
};