力扣136只出现一次的数字(哈希map)

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

发布了165 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42269817/article/details/104616585
今日推荐