本文介绍: 4.定义一个结果变量遍历其中一个哈希表,每遍历哈希表中一个元素我们取出这个哈希表中的实值,然后以0减去当前哈希表中键值所得到的数作为另一个哈希表中键值取出另一个的实值,取出的这两个实值进行相乘然后加到我们结果变量即可。2.创建两个哈希表(这里用unordered_map),两个哈希表的键值都是其组内第一个整数数组中的元素第二个整数数组中的元素相加所得的数,实值是当前键值的数出现的次数。3.进行遍历,每组中的第一个整数数组每个数都和第二个整数数组加一遍,得到的数存入对应的哈希表中。

每日一题(LeetCode)—-哈希表–四数相加 II

1.题目454. 四数相加 II

给你四个整数数组 nums1nums2nums3nums4数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

示例 1:

输入nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

示例 2:

输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出:1

提示

2.解题思路

思路一:分组+哈希法

1.一共有四组整数数组,我们每两个为一组这里我们以前两组整数数组为一组,后两组整数数组为一组)

2.创建两个哈希表(这里用unordered_map),两个哈希表的键值都是其组内第一个整数数组中的元素和第二个整数数组中的元素相加所得的数,实值是当前键值的数出现的次数

3.进行遍历,每组中的第一个整数数组的每个数都和第二个整数数组相加一遍,得到的数存入对应的哈希表中

4.定义一个结果变量,遍历其中一个哈希表,每遍历到哈希表中一个元素,我们取出这个哈希表中的实值,然后以0减去当前哈希表中的键值所得到的数作为另一个哈希表中的键值取出另一个的实值,取出的这两个实值进行相乘然后加到我们的结果变量上即可

3.写出代码

思路一的代码

class Solution {
public:
    int fourSumCount(vector<int&gt;&amp; nums1, vector<int&gt;&amp; nums2, vector<int&gt;&amp; nums3, vector<int>&amp; nums4) {
        int length=nums1.size();
        unordered_map<int,int> ma1;
        unordered_map<int,int> ma2;
        for(int i=0;i<length;i++){
            for(int j=0;j<length;j++){
                if(ma1.count(nums1[i]+nums2[j])==0){
                     ma1[nums1[i]+nums2[j]]=1;
                }
                else{
                     ma1[nums1[i]+nums2[j]]++;
                }

                if(ma2.count(nums3[i]+nums4[j])==0){
                ma2[nums3[i]+nums4[j]]=1;
                }
                else{
                ma2[nums3[i]+nums4[j]]++;
                }

            }
        }

        int res=0;
        for(auto v:ma1){
            if(ma2.count(0-v.first)!=0){
                res+=v.second*ma2[0-v.first];
            }
        }
        
        return res;
    }
};

原文地址:https://blog.csdn.net/m0_73483024/article/details/134709070

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_18273.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注