zoukankan      html  css  js  c++  java
  • Lc454_四数相加 II

     1import java.util.HashMap;
    2import java.util.Map;
    3
    4/**
    5 * 454. 四数相加 II
    6 * 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。
    7 * <p>
    8 * 为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。
    9 * <p>
    10 * 例如:
    11 * <p>
    12 * 输入:
    13 * A = [ 1, 2]
    14 * B = [-2,-1]
    15 * C = [-1, 2]
    16 * D = [ 0, 2]
    17 * <p>
    18 * 输出:
    19 * 2
    20 * <p>
    21 * 解释:
    22 * 两个元组如下:
    23 * 1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
    24 * 2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
    25 */

    26public class FourSumCount {
    27    /**
    28     * 还是hash的思路,记录已存在的结果值
    29     * 吧前俩个数组的值以及出现的次数存储到map里
    30     * 然后用结果减去后俩个数组的和减去看是否存在这个key
    31     *
    32     * @param A
    33     * @param B
    34     * @param C
    35     * @param D
    36     * @return
    37     */

    38    public static int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
    39        Map<Integer, Integer> map = new HashMap<>();
    40
    41        for (int i = 0; i < A.length; i++) {
    42            for (int j = 0; j < B.length; j++) {
    43                int sum = A[i] + B[j];
    44                if (map.containsKey(sum)) {
    45                    int count = map.get(sum);
    46                    map.put(sum, ++count);
    47                } else {
    48                    map.put(sum, 1);
    49                }
    50            }
    51        }
    52
    53        int res = 0;
    54
    55        for (int i = 0; i < C.length; i++) {
    56            for (int j = 0; j < D.length; j++) {
    57                int sum = C[i] + D[j];
    58                if (map.containsKey(0 - sum)) {
    59                    res += map.get(0 - sum);
    60                }
    61            }
    62        }
    63
    64        return res;
    65    }
    66
    67    public static void main(String[] args) {
    68//        int[] A = {1, 2};
    69//        int[] B = {-2, -1};
    70//        int[] C = {-1, 2};
    71//        int[] D = {0, 2};
    72        int[] A = {-1, -1};
    73        int[] B = {-11};
    74        int[] C = {-11};
    75        int[] D = {1, -1};
    76        System.out.println(fourSumCount(A, B, C, D));
    77    }
    78}
    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    oracel中wm_concat函数使用
    plsql快捷键设置
    mybatis generator--逆向工程工具的使用
    subline_2使用格式化html等文件
    subline的使用
    关于ssm整合过程中,spring配置文件无提示功能
    初识shell脚本
    ReentrantReadWriteLock原理
    策略模式
    适配器模式
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14431632.html
Copyright © 2011-2022 走看看