方法一:暴力求解,排序后两个两个比较,两者不同时前者为答案:
class Solution {
public:
int singleNumber(vector<int>& nums) {
if(nums.size() == 1) return nums[0];
list<int> l;
int ans = 0;
for(int i = 0;i< nums.size();i++)
{
l.push_back(nums[i]);
}
l.sort();
l.push_back(-1);//最后添加一个凑双数比较
for(list<int>::iterator it = l.begin();it != l.end();it++)
{
if(*it!=*(++it))
{
ans = *(--it);
it++;
return ans;
}
}
return ans;
}
};
方法二:技巧解法,所有数进行异或运算,结果就是答案
异或运算的概念:
异或运算的特点:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0;i < nums.size();i++)
{
ans ^= nums[i];//异或运算^=
}
return ans;
}
};