2022-4-17 面试高频题
给你四个整数数组 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 class Solution { 2 public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { 3 int res=0; 4 Map<Integer,Integer> map1=new HashMap<>(); 5 Map<Integer,Integer> map2=new HashMap<>(); 6 for (int x:nums1){ 7 for (int y:nums2){ 8 map1.put(x+y,map1.getOrDefault(x+y,0)+1); 9 } 10 } 11 for (int x:nums3){ 12 for (int y:nums4){ 13 map2.put(x+y,map2.getOrDefault(x+y,0)+1); 14 } 15 } 16 for (int key:map1.keySet()){ 17 res+=map1.get(key)*map2.getOrDefault(-key,0); 18 } 19 return res; 20 } 21 }
思路:分组计算,减少计算规模。可以优化只要一个hash表。
class Solution { public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { int res=0; Map<Integer,Integer> map=new HashMap<>(); for (int x:nums1){ for (int y:nums2){ map.put(x+y,map.getOrDefault(x+y,0)+1); } } for (int x:nums3){ for (int y:nums4){ if (map.containsKey(-x-y)){ res+=map.get(-x-y); } } } return res; } }