LeetCode#454 | Nobilta's Blog
0%

LeetCode#454

LeetCode#454四数相加Ⅱ

题目链接
给你四个数组A B C D,问你有能找到多少对使得A[i]+B[j]+C[k]+D[l]=0,想解决这道题很容易,问题是如何优化时间复杂度。(n²²好评
我们可以使用哈希map(哈希表比默认的红黑树要快),先用n²的时间复杂度遍历一遍数组A和B,并记录它们的和,然后再用相同的方式遍历一遍CD,我们只需要判断-(C[i]+D[j])是否已经存在于map中就可以了,如果存在则证明找到了一组加和为0的数。
附代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int>ab;
int ans=0;
for(auto i : A)
for(auto j : B)
ab[i+j]++;
for(auto i : C)
for(auto j : D)
if(ab.count(-(i+j)))
ans+=ab[-(i+j)];
return ans;
}
};

(看完题解,就这就这?

您的支持将鼓励我继续创作!