有四个数组,让你找到这四个数组组成的四位数字之和为0的个数
分析:本题其实和两数组内两数之和为0的题是一致的,只不过两数组内两数之和为0的题是本来就是两个数组,而本题需要人为的将四个数组划归为两个整体即可。 将两个数组通过双循环合并成一个数组,并将结果记录在map中,统计个数。剩下的两个也是一样的做法,只不过对于剩下的两个每做一次求和就在map集合中搜索一次,将所有可以使结果为0的值个数相加即可
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(-temp)) {
res += map.get(-temp);
}
}
}
return res;
}
总结:对于要求个数的题目,大多数都需要利用map来统计某些情况下的个数总和