今天,我们分享的题目是Leetcode454四数相加Ⅱ,我们先来看题目:
首先可以从题意中大体得知,也是从某个集合中找有没有符合条件的元素。遇见这种类型的题目我们可以考虑用哈希表,本题我们选取的是map集合,因为题目范围较大,并且可以存在重复的。
解题思路:我们首先开拓一个map集合,然后遍历数组nums1和nums2数组并记录它们的所有元素的和记为a+b
,并且存放到map集合中,之后我们遍历nums3和num4数组并且记录num3数组和nums4数组中的和记为c+d
,那么我们遍历maps集合寻找目标元素0-(c+d)
,如果有则返回它的出现的次数。
我们结合代码进行具体的讲解:
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
int i=0;
int j=0;
int res=0;
Map<Integer,Integer> maps=new HashMap<>();
for (i=0;i<nums1.length;i++){
for (j=0;j<nums2.length;j++){
int sum=0;
sum=nums1[i]+nums2[j];
//如果map集合中已经有了sum
if (maps.containsKey(sum)){
//将sum的value更新
maps.put(sum,maps.get(sum)+1);
}else {
//如果没有存放过,将sum的value记为1
maps.put(sum,1);
}
}
}
for (i=0;i<nums3.length;i++){
for (j=0;j<nums4.length;j++){
//目标值
int sum=-(nums3[i]+nums4[j]);
//如果map中存在我们想要的目标值
if (maps.containsKey(sum)){
//将目标值所有的情况进行累加
res+= maps.get(sum);
}
}
}
return res;
}
}
maps.put(sum,maps.get(sum)+1)
:我们使用 get() 方法获取键为 “sum” 的值,并将其存储在 sum 变量中。然后,我们将 sum 的值加1,并使用 put() 方法将新的值更新到 Map 中。
maps.get()
方法:如果maps中存在我们想要的key,返回1,否则返回null。
这是这两个函数需要注意的地方。
那么今天的题目就讲解到这里结束了,如果小伙伴们有什么疑问,欢迎在博客下方进行留言,博主看到会进行一一回复。(●’?’●)!