0%

leetcode 454 4SumII

leetcode 454 4Sum II

首先想到的是四维循环。。。 但很明显❎️

大部分算法都是将问题的规模变小,然后将小问题组合成为最后需要问题的解

将前两个 vector 中所有数字组合的和记录到一个哈希表中,然后在后两个 vector 中找是否有数字和哈希表中的数字成相反数就可以了

复杂度: 遍历两个 vector 复杂度是 \(N^2\) ,所以最后的复杂度也就是 \(O(n^2)\)

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
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> mm;
for(int i=0;i<A.size();i++){
for(int j=0;j<B.size();j++){
if(mm.find(A[i]+B[j])==mm.end()){
mm[A[i]+B[j]]=1;
}else{
mm[A[i]+B[j]]++;
}
}
}

int cnt=0;
for(int i=0;i<C.size();i++){
for(int j=0;j<D.size();j++)
{
int target=-(C[i]+D[j]);
if(mm.find(target)!=mm.end()){
cnt+=mm[target];
}
}
}
return cnt;
}
};