LeetCode454. 四数相加 II

如果有A[i] + B[j] + C[k] + D[l] = 0,那么就有C[k] + D[l] = -(A[i] + B[j])

因此我们可以用两重循环遍历A数组和B数组,同时对A[i] + B[j]的所有可能取值进行哈希。

然后再用两重循环遍历C数组和D数组,看一下之前是否对-(C[k] + D[l])做过哈希,如果存在,
说明我们找到了一个和为0的四元组,更新一下答案。

代码如下:

class Solution {
public:
    unordered_map<int, int> hash; 

    int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
        int n = A.size();
        for(int i = 0; i < n; ++i) {               
            for(int j = 0; j < n; ++j) {
                ++hash[A[i] + B[j]];
            }
        }
        int res = 0;
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                res += hash[-(C[i] + D[j])];
            }
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/linrj/p/13885058.html