zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    CF981D
    CF883H
    Hdu 5884
    全排列
    二叉搜索树实现
    my.ini配置详解
    主元素问题
    排序算法(还需补充)
    迷宫问题(DFS,BFS)
    算法导论4--求最大和数组
  • 原文地址:https://www.cnblogs.com/linrj/p/13885058.html
Copyright © 2011-2022 走看看