题目链接 给你四个数组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
classSolution { public: intfourSumCount(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; } };