力扣 454 四数相加

发布时间 2023-03-22 21:13:10作者: 我的秘密小屋

从四个vector里找四个数成一组,使得他们的和为零,问有几个这样的组。

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        int len1=nums1.size();
        int len2=nums2.size();
        int len3=nums3.size();
        int len4=nums4.size();
        unordered_map<int,int> mp1;                       //前两个数组和为键,个数为值
        unordered_map<int,int> mp2;                       //后两个数组的和为键,个数为值
        unordered_map<int,int>::iterator it,itt;      
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                mp1[nums1[i]+nums2[j]]++;                 
            }
        }
        for(int i=0;i<len3;i++){
            for(int j=0;j<len4;j++){
                mp2[nums3[i]+nums4[j]]++;
            }
        }
        int ans=0;
        for(it=mp1.begin();it!=mp1.end();it++){
            int a=it->second;
            int b=-it->first;
            itt=mp2.find(b);                             //unordered_map 中find()的复杂度是O(1)
            if(itt!=mp2.end())
            {
                int c=itt->second;
                ans+=a*c;
            }
            
        }
        return ans;
    }
};