zoukankan      html  css  js  c++  java
  • 454. 4Sum II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such that A[i] + B[j] + C[k] + D[l] is zero.

    To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500. All integers are in the range of -228 to 228 - 1 and the result is guaranteed to be at most 231 - 1.

    Example:

    Input:
    A = [ 1, 2]
    B = [-2,-1]
    C = [-1, 2]
    D = [ 0, 2]
    
    Output:
    2
    
    Explanation:
    The two tuples are:
    1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
    2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

    Approach #1: burp force[Limted Time Exceeded]

    class Solution {
    public:
        int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
            int len = A.size();
            int count = 0;
            for (int i = 0; i < len; ++i) {
                for (int j = 0; j < len; ++j) {
                    for (int k = 0; k < len; ++k) {
                        for (int h = 0; h < len; ++h) {
                            if (A[i] + B[j] + C[k] + D[h] == 0)
                                count++;
                        }
                    }
                }
            }
            return count;
        }
    };
    

      

    Approach #2: Hash Table

    class Solution {
    public:
        int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
            int count = 0;
            map<int, int> ab_sum;
            for (int a : A) {
                for (int b : B) {
                    ++ab_sum[a+b];
                }
            }
            for (int c : C) {
                for (int d : D) {
                    auto it = ab_sum.find(0-c-d);
                    if (it != ab_sum.end()) count += it->second;
                }
            }
            return count;
        }
    };
    
    Runtime: 248 ms, faster than 25.52% of C++ online submissions for 4Sum II.
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9925104.html
Copyright © 2011-2022 走看看