1.题目描述
2.题解
解题思路与两数相加类似,运用哈希法,已知一个数和目标值,在哈希表中寻找另一个数。
大致步骤:①建立一个哈希表存放数组1和2的和(key存和的值,value存出现次数)
②遍历数组3和4的和,判断哈希表中是否有temp(大小等于0-数组1与2的和)
③返回最终的个数
3.代码示例
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
//用于存放数组一和二的和
Map<Integer,Integer> abSum=new HashMap<>();
int result=0;
int length=nums1.length;
int temp=0;//记录0-nums3[]-nums4[]
int count=0;//记录个数
//将数组1和2的和记录到哈希表中,key表示和的值,value表示次数
for(int i=0;i<length;i++){
for(int j=0;j<length;j++){
if(abSum.containsKey(nums1[i]+nums2[j])){
count=abSum.get(nums1[i]+nums2[j]);
abSum.put(nums1[i]+nums2[j],++count);
}
else
abSum.put(nums1[i]+nums2[j],1);
}
}
//遍历数组3和4的和判断哈希表中是否有满足条件的temp
for(int a=0;a<length;a++){
for(int b=0;b<length;b++){
temp=0-(nums3[a]+nums4[b]);
if(abSum.containsKey(temp))
result+=abSum.get(-(nums3[a]+nums4[b]));
}
}
return result;
}
}
4.问题总结
i.如何记录数组1与2元素和的出现次数
运用哈希表的get()方法获取原本的次数,若本来就没有就把次数赋1,反之就赋++get(key)。
ii.最后的返回值的记录
满足条件时不应该是简单的++,而是加上对应的哈希表中的value。