![算法通关之路](https://wfqqreader-1252317822.image.myqcloud.com/cover/162/40795162/b_40795162.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.4 四数相加II
题目描述(第454题)
给定4个包含整数的数组列表A、B、C、D,计算有多少个元组(i,j,k,l)能使A[i]+B[j]+C[k]+D[l]=0。
为了使问题简单化,所有的A、B、C、D具有相同的长度n,且0≤n≤500。所有整数的范围在-228到228-1之间,最终结果不会超过231-1。
示例
输入:A=[1,2],B=[-2,-1],C=[-1,2],D=[0,2]
输出:2
解释:
两个元组如下。
● (0,0,0,1)→A[0]+B[0]+C[0]+D[1]=1+(-2)+(-1)+2=0
● (1,1,0,0)→A[1]+B[1]+C[0]+D[0]=2+(-1)+(-1)+0=0
这是四数之和的第2个版本。这道题不再是1个数组,而是4个数组,并在每个数组中挑选一个数,使其相加等于0。
思路
类似地,我们仍然可以固定两个元素,然后将所有的两两组合存起来,然后去寻找另外两个元素。这样的时间复杂度为O(n2)。如果你愿意的话,也可以固定1个元素然后寻找3个元素,但是这样的时间复杂度是O(n3)。
![](https://epubservercos.yuewen.com/E20D8A/21190708101164106/epubprivate/OEBPS/Images/txt002_9.jpg?sign=1738861716-HCNOzbJntjKpxnzhVklzWKu1mtywjPMd-0-784459fb0d64d0d1aa97828de2612659)
代码
![](https://epubservercos.yuewen.com/E20D8A/21190708101164106/epubprivate/OEBPS/Images/txt002_10.jpg?sign=1738861716-3RybXFpGF2YBmS1UlFgqa6AMWpr48EC8-0-55c89c7c57301bba7b4829384f4f206b)
复杂度分析
● 时间复杂度:O(n2)。
● 空间复杂度:我们使用mapper来存储A和B两两相加的结果,因此空间复杂度为O(n),其中n为数组长度(题目限定了A、B、C、D 这4个数组长度是相同的)。