zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    使用freemarker生成word,步骤详解并奉上源代码
    汉诺塔问题
    java interview
    java 反射
    java 匿名内部类
    java 内部类(转)
    MYSQL和ORACLE的一些区别
    Hibernate总结(转)
    Hibernate的使用
    Arduino LM35温度检测
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117564.html
Copyright © 2011-2022 走看看