题目:454. 四数相加 II - 力扣(LeetCode)
代码随想录题解:代码随想录 (programmercarl.com)
学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili
看题没思路,直接看题解
四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0 即可,不用考虑祛重的问题。
大体思路:
1、先求nums1数组中的元素和nus2数组中的元素相加之和nums
2、用map统计同一个nums出现的次数
class Solution{
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){
int res = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//创建一个map统计nums的值及其出现的次数
for(int i : nums1){
for(int j : nums2){
int sum = i + j;
map.put(sum, map.getOrDefault(sum,0)+1);
}
}
}
}
3、
统计剩余的两个元素的和,在map中找是否存在相加为0的情况,同时记录次数
for(int i : nums3){
for(int j : nums4){
res += map.getOrDefault(0-i-j,0);
}
}
综合代码:
class Solution{
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){
int res = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//创建一个map统计nums的值及其出现的次数
for(int i : nums1){
for(int j : nums2){
int sum = i + j;
map.put(sum, map.getOrDefault(sum,0)+1);
}
}
for(int i : nums3){
for(int j : nums4){
res += map.getOrDefault(0-i-j,0);
}
}
return res;
}
}