1、
2、哈希解法(看了好久才明白)
//哈希暴力求解
class Solution {
public:
int singleNumber(vector<int>& nums) {
map<int,int> m;
for(int i=0; i<nums.size();i++){
if(m.find(nums[i]) != m.end()){//寻找已有的key值num[i],删除it
m.erase(m.find(nums[i]));//num[i]作为key值
}else{
m[nums[i]] = 1;//1作为value,把key即num[i]和value 1,加进去。
}
}
return m.begin()->first;//返回key
}
};
3、异或
头一次接触异或。
任何一个数字异或它本身都等于0
所以利用异或我们可以查找不同的数字
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=nums[0];
for(int i=1;i<nums.size();i++)//第一次写的时候把这里写成了i=0开始
{
ans=ans^nums[i];
}
return ans;
}
};
异或用于查找不同的数字确实很方便
自己把循环条件又写错了一次,ans=0那么他就应该是和下一个比较一直到最后,不然和自己比较ans等于0
[2,2,1]就成了2^1 10 01 11 结果为3