四数相加 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

  示例

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

  解题:计算的时间复杂度

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
       int len3=nums3.length;
       int len4=nums4.length;
       Map<Integer,Integer> abMap=new HashMap();
       for(int i=0;i<len3;i++){
          for(int j=0;j<len4;j++){
             int key=nums3[i]+nums4[j];
             int count=abMap.getOrDefault(key, 0);
             abMap.put(key,count+1);
          }
       }

       int len1=nums1.length;
       int len2=nums2.length;
       int sum=0;
       for(int i=0;i<len1;i++){
           for(int j=0;j<len2;j++){
               int key=nums1[i]+nums2[j];
               Integer count=abMap.get(-key);
               if(count!=null){
               sum+=count;
               }
           }
       }
       return sum;
    }
}

 

posted on 2021-11-28 19:49  溪水静幽  阅读(44)  评论(0)    收藏  举报