哈希表之练习【4】

学习安排根据《代码随想录》~leetcode454

哈希表之练习【4】

思路是有的,就类似于两个数组在哈希表里面找相反数题型一样,就是多了数组个数。

可能之前写的题目有些遗忘了,一直想着用multiset去做,为了避免重复的,找到后就删掉,为了防止还可能遇到相同的数,删完了再加回来。因此写完的代码严重超时。

最后还是看了答案,看来是自己陷入了set的沼泽了,用map处理会简单很多。

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) 
    {
        int sum1=0;
        int sum2=0;
        int numcount=0;
        unordered_map<int,int>s;
        for(int u:nums1)
        {
            for(int v:nums2)
            {
                sum1=v;
                sum1+=u;
                s[sum1]++;
            }
        }
        for(int i:nums3)
        {
            for(int j:nums4)
            {
                sum2=j;
                sum2+=i;
                if(s.find(-sum2)!=s.end())
                {
                    numcount+=s[-sum2];
                }

            }
        }
        return numcount;
    }
};

虽然最后自己也写出来了,过程中 s[sum1]++;这一步我一度没理解,后来才醒悟,map【key】=value,而此时的value为次数,即遇到相同的,次数就增加。

但是,个人还是不能理解,s[sum1]++这种写法可以给map 添加值了吗,不应该是make_pair(key,value)之类的吗?

写完再想想,可能之前学过的一些东西忘记了~

上一篇:Java第六课--方法的语法,调用与重载


下一篇:大小端字节序(存储)——百度,华为,腾讯,深信服大厂面试题(详解)