本文介绍: 4.定义一个结果变量,遍历其中一个哈希表,每遍历到哈希表中一个元素,我们取出这个哈希表中的实值,然后以0减去当前哈希表中的键值所得到的数作为另一个哈希表中的键值,取出另一个的实值,取出的这两个实值进行相乘然后加到我们的结果变量上即可。2.创建两个哈希表(这里用unordered_map),两个哈希表的键值都是其组内第一个整数数组中的元素和第二个整数数组中的元素相加所得的数,实值是当前键值的数出现的次数。3.进行遍历,每组中的第一个整数数组的每个数都和第二个整数数组相加一遍,得到的数存入对应的哈希表中。
每日一题(LeetCode)—-哈希表–四数相加 II
1.题目(454. 四数相加 II)
给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 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
提示:
n == nums1.length
n == nums2.length
n == nums3.length
n == nums4.length
1 <= n <= 200
-228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228
2.解题思路
思路一:分组+哈希法
1.一共有四组整数数组,我们每两个为一组(这里我们以前两组整数数组为一组,后两组整数数组为一组)
2.创建两个哈希表(这里用unordered_map),两个哈希表的键值都是其组内第一个整数数组中的元素和第二个整数数组中的元素相加所得的数,实值是当前键值的数出现的次数
3.进行遍历,每组中的第一个整数数组的每个数都和第二个整数数组相加一遍,得到的数存入对应的哈希表中
4.定义一个结果变量,遍历其中一个哈希表,每遍历到哈希表中一个元素,我们取出这个哈希表中的实值,然后以0减去当前哈希表中的键值所得到的数作为另一个哈希表中的键值,取出另一个的实值,取出的这两个实值进行相乘然后加到我们的结果变量上即可
3.写出代码
思路一的代码
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& 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进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。