采用分为两组,Map 存一组,另一组和 Map 进行比对。
这样的话情况就可以分为三种:
Map 存一个数组,如 A。然后计算三个数组之和,如 BCD。时间复杂度为:O(n)+O(n3),得到 O(n3).
Map 存三个数组之和,如 ABC。然后计算一个数组,如 D。时间复杂度为:O(n3)+O(n),得到 O(n3).
Map存两个数组之和,如AB。然后计算两个数组之和,如 CD。时间复杂度为:O(n2)+O(n2),得到 O(n2).
这里选用时间复杂度最低地第三种情况
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
map<int, int> mp;
for (int i = 0; i < nums1.size(); i++)
{
for (int j = 0; j < nums2.size(); j++)
{
mp[nums1[i] + nums2[j]]++;
}
}
int ans = 0;
for (int i = 0; i < nums3.size(); i++)
{
for (int j = 0; j < nums4.size(); j++)
{
int sum = nums3[i] + nums4[j];
if (mp[0 - sum] > 0)
ans += mp[0 - sum];
}
}
return ans;
}
};