leetcode: 454. 4Sum II
原题链接
这道题目很自然的一个思路就是运用4重for循环,暴力判断,结果超时。
思考改进,想到用哈希表可以把最后一次for循环省掉,优化到3重for循环,还是超时。最后优化到O(n^2)
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int cnt = 0;
unordered_map<int, int> mp1, mp2;
for (int x : nums1)
for (int y : nums2)
mp1[x + y]++;
for (int x : nums3)
for (int y : nums4)
mp2[x + y]++;
for (auto x : mp1) { // 此时x为一个pair
int first = x.first;
int second = x.second;
if (mp2[-first] > 0)
cnt += second * mp2[-first];
}
return cnt;
}
};