LeetCode 454. 四数相加 II

题目链接

454. 四数相加 II

题目分析

这个题最容易想的就是暴力法,O(n^4)的时间复杂度必定会T,所以不用想。
然后我们就可以利用缓存的思想,把A,B,C,D分成两个组,先对AB计算组合和,然后对CD计算组合和,检查AB中是否有其相反数,如果有的话就把AB中出现相反数次数加到res上。

代码实现

class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        int res = 0;
        HashMap<Integer, Integer> map1 = new HashMap<>();
        int i = 0;
        while(i < A.length){
            int j = 0;
            while(j < B.length){
                int sum = A[i] + B[j];
                map1.put(sum, map1.getOrDefault(sum, 0) + 1);
                j++;
            }
            i++;
        }
        int k = 0;
        while(k < C.length){
            int l = 0;
            while(l < D.length){
                int sum = C[k] + D[l];
                res += map1.getOrDefault(-sum, 0);
                l++;
            }
            k++;
        }
        return res;
    }
}
posted @ 2020-09-05 12:20  ZJPang  阅读(85)  评论(0编辑  收藏  举报