哈希表 | LeetCode 454 四数相加II

37 阅读1分钟

题目描述

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

本题思路

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3,
                     vector<int>& nums4) {
        unordered_map<int, int> map;
        for (int a : nums1) {
            for (int b : nums2) {
                map[a + b]++;
            }
        }
        int result = 0;
        for (int c : nums3) {
            for (int d : nums4) {
                if (map.find(-(c + d)) != map.end()) {
                    result += map[-c - d];
                }
            }
        }
        return result;
    }
};

总体想法和两数之和类似,先把前两个数组不同组合如两个数组都为n即有n*n种数据元素之和,不排除重复的可能.

对不同的数据元素之和进行统计,key为两元素之和,value为同一元素之和出现的次数(分组操作)。后两组直接在上两组的操作之上进行查找,每查找到一次元素之和为零就计数。

进行完分组操作后就类似于两数之和,只不过是target = 0.