LeetCode454. 四数相加 II

一、题目描述

☆☆☆☆二、解法

思路:将C+D的每一种可能放入查找表中,时间复杂度为O(n^2)。 由于可能有多组C+D的和相等,用Map记录每一个和出现了多少次。

举一反三:不是直接把数据放入查找表中,而是组合逻辑把特定的内容放入查找表中。还可以把A+B和C+D的每一种可能放入两个查找表中,时间复杂度依然是O(n^2)的。

class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        /**
         *  思路: 使用Map记录C+D的每一种可能,将时间复杂度由 O(n^4) 优化到 O(n^2)
         *          空间复杂度 O(n^2)
         */
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < C.length; i++) {
            for (int j = 0; j < D.length; j++) {
                map.put(C[i]+D[j], map.getOrDefault(C[i]+D[j], 0) + 1);
            }
        }
        int count = 0;
        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < B.length; j++) {
                int target = - (A[i] + B[j]);
                if (map.containsKey(target)) {
                    count += map.get(target);
                }
            }
        }
        return count;
    }
}

 

posted @ 2020-12-11 15:27  不学无墅_NKer  阅读(70)  评论(0编辑  收藏  举报