2022-4-17 面试高频题

给你四个整数数组 nums1nums2nums3 和 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;
    }
}

 

posted on 2022-04-17 14:00  阿ming  阅读(20)  评论(0编辑  收藏  举报

导航