楼盘网站建设方案,专业全网推广建站公司,东纺服装人才网,做网站公司 郑州题目#xff1a;leetcode454. 四数相加 II
描述#xff1a; 给你四个整数数组 nums1、nums2、nums3 和 nums4 #xff0c;数组长度都是 n #xff0c;请你计算有多少个元组 (i, j, k, l) 能满足#xff1a;
0 i, j, k, l n nums1[i] nums2[j] nums3[k] num…题目leetcode454. 四数相加 II
描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 数组长度都是 n 请你计算有多少个元组 (i, j, k, l) 能满足
0 i, j, k, l n nums1[i] nums2[j] nums3[k] nums4[l] 0
示例 1
输入nums1 [1,2], nums2 [-2,-1], nums3 [-1,2], nums4 [0,2] 输出2 解释 两个元组如下
(0, 0, 0, 1) - nums1[0] nums2[0] nums3[0] nums4[1] 1 (-2) (-1) 2 0(1, 1, 0, 0) - nums1[1] nums2[1] nums3[0] nums4[0] 2 (-1) (-1) 0 0
示例 2
输入nums1 [0], nums2 [0], nums3 [0], nums4 [0] 输出1
思路 还是使用map集合在一个集合里面存放前两个数组的任意两个数之和键这个“和”出现的次数值最后使用两个for嵌套遍历后面两个数组得到kl使用0-k-l得到需要的值在map里面查询这个值查询到就说明前两个数组里面存在一个组合可以跟kl相加得到0所以countcount从map取出的值出现的次数最后返回count。
import java.util.HashMap;
import java.util.Map;public class Solution{public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int count0;MapInteger,Integer mapnew HashMap();for (int i :nums1) {for (int j :nums2) {
// if(map.containsKey(sum)) {
// map.put(sum, map.get(sum) 1);
// }
// else {
// map.put(sum, 1);
// }//上面的注释的部分使用下面的一句来代替节省了大部分时间map.put(ij,map.getOrDefault(ij,0)1);}}for (int k:nums3) {for (int l :nums4) {countmap.getOrDefault(0-k-l,0);}}return count;}
}