题目
链接:454. 四数相加 II - 力扣(LeetCode)
思路
- 定义一个map,key存放两数之和,value存放两数之和出现的次数
- 遍历前两个数组,统计两数之和,两数之和出现的次数,放到map中
- 定义res 存放四数之和为0出现的次数
- 遍历后两个数组,如果找到0-(前两数组之和)在map中出现过的话,就用res加上value对应的值来统计对应次数
代码
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){
Map<Integer,Integer> map = new HashMap<>();
int temp;
int res = 0;
//统计两个数组中的元素之和,同时统计出现的次数,放入map中
for(int i : nums1){
for(int j : nums2){
temp = i + j;
if(map.containsKey(temp)){
map.put(temp,map.get(temp) + 1);
} else {
map.put(temp,1);
}
}
}
//统计剩余的两个元素的和,在map中找是否存在相加为0的情况,同时记录次数
for(int i : nums3){
for(int j : nums4){
temp = i + j;
if(map.containsKey(0 - temp)){
res += map.get(0 - temp);
}
}
}
return res;
}
}