一:题目描述:
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
二:示例与提示
示例 1:
1 | 输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] |
示例 2:
1 | 输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0] |
提示:
- n == nums1.length
- n == nums2.length
- n == nums3.length
- n == nums4.length
- 1 <= n <= 200
- -228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228
三:思路
分组+哈希表
将四个数组分为A+B,C+D
对于A+B,二重循环进行遍历,求A+B的和,将A[i]+B[j]的和作为哈希表的键存入,值是A[i]+B[j]的和出现的次数
对于C+D,同样用二重循环进行遍历,当-(C[k]+D[l])出现在哈希映射中,那么将对应的键值累加
四:代码
注意
:map.get(leftNums)+1
当我们对哈希map的键值自增的时候,是不可以写成,map.get()++,这样会报错。无论改成++map.get(),map.get() += 1都会报出相同的错误。
我们无法自增map.get()的返回值,我们需要将其转换成命名表达式,然后才能进行更改
网上搜索了解到在C++术语中说++需要一个左值,但函数的返回值是一个右值
哈希表
1 | /** |