一、思路
这道题其实和两数之和挺像。
我们把A+B,C+D分为两组,那么就变成了两数之和,如果暴力的话,需要4重for循环,这样只需要两个2重for循环。
首先A+B的结果存在哈希表
m
m
m中,然后C+D的结果
t
t
t去查询哈希表
m
m
m中有无
-
t
-t
-t存在,存在就把结果加上dic[-t]。
二、代码
代码如下:
1.python
class Solution:
def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
dic = {}
res = 0
for a in A:
for b in B:
t = a+b
dic[t] = dic.get(t,0) + 1
for c in C:
for d in D:
t = c+d
if 0 - t in dic.keys():
res += dic[-t]
return res
2.C++
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
map<int,int> m;
int res = 0;
for(int a=0;a<A.size();a++){
for(int b=0;b<B.size();b++){
int t = A[a]+B[b];
m[t]++;
}
}
for(int c=0;c<C.size();c++){
for(int d=0;d<D.size();d++){
int t = C[c]+D[d];
if(m.find(0-t)!=m.end()){
res += m[-t];
}
}
}
return res;
}
};