454. 四数相加 II

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

示例 1:

**输入:**nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
**输出:**2
解释:
两个元组如下:

  1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
  2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0

示例 2:

**输入:**nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
**输出:**1

  提示:


使用map,key存放nums1[i]+nums2[i],value存放nums1[i]+nums2[i]出现的次数。

遍历nums3,nums4,如果0 - (nums3 + nums4)在map中,则增加count。返回count。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {

public:

    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {

        unordered_map<int,int> maps;

        for(int a : nums1)

        {

            for(int b : nums2)

            {

                maps[a+b]++;

            }

        }

        int count = 0;

        for(int c : nums3)

        {

            for(int d : nums4)

            {

                if(maps.find(0 - (c+d)) != maps.end())

                {

                    count += maps[0 - (c+d)];

                }

            }

        }

        return count;

    }

};

上次更新 2025-04-08