LeetCode :四数相加 II
⭕️ 解题思路:
(1)先分组再利用哈希表存储判断
(2) 将nums1、nums2的和分为一组,将nums3、nums4的和分为一组
(3)利用散列桶记录nums1和nums2的所有和的情况,key记录出现的数值,value记录当前数值出现的次数。对于没出现过的数据,直接添加到散列桶中,出现过的更新出现的次数即可。
(4)再遍历nums3、nums4两个数组,判断散列桶的Key是否包含-(nums3[i]
+ nums4[j]),如果有就加上在散列桶中对应的Key的Value。
❌ 代码部分:
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
int count = 0;
int temp;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
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);
// }
//利用HashMap的getOrDefault()代替上边的方法
map.put(temp, map.getOrDefault(temp, 0) + 1);
}
}
for(int i : nums3){
for(int j : nums4){
temp = i + j;
if(map.containsKey(0 - temp)){
count += map.get(0 - temp);
}
}
}
return count;
}
}
PS:
hashmap.getOrDefault(key,defaultvalue)
如果找到key就返回对应value,否则返回设定的默认值