本文主要是介绍454.四数相加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 n
,请你计算有多少个元组 (i, j, k, l)
能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
方法一:
双层for循环,将nums1、nums2的所有元素和的可能求出来,用<key, value>表示<sum,sum出现的次数>
再次双层for时,nums3、nums4和与nums1、nums2相反时,取出这个<sum出现的次数>,将这些<sum出现的次数>求和到ans中,返回即可。
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4){Map<Integer, Integer> map1 = new HashMap<>();int n = nums1.length;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int sum = nums1[i] + nums[j];if(map1.containsKey(sum)){ int value = map1.get(sum)map1.put(sum, ++value);} else {map1.put(sum, 1);}}}int ans = 0;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int sum = ( nums3[i] + nums4[j] ) * (-1);if(map1.containsKey(sum)) ans += map1.get(sum);}}return ans;
}
简化:
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 计算nums1 nums2和有哪些种,并记录每种的次数Map<Integer, Integer> map1 = new HashMap<>();int n = nums1.length;for(int i : nums1){for(int j : nums2){int sum = i + j;// ket - sum value --次数map1.put(sum, map1.getOrDefault(sum, 0) + 1 );// map1.getOrDefault(sum, 0) + 1 // 如果存在sum这个key就返回它的value,不存在就返回0// +1 代表,如果存在sum这个key就value++,不存在就加入一个,value设置为1// if(map1.containsKey(sum)){// int value = map1.get(sum);// map1.put(sum, ++value);// } else {// map1.put(sum, 1);// }}}int ans = 0;//Map<Integer, Integer> map2 = new HashMap<>();for(int i : nums3){for(int j : nums4){int sum = -i - j;if(map1.containsKey(sum)) ans += map1.get(sum);}}return ans;
}
这篇关于454.四数相加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!