参考链接:代码随想录:Leetcode454四数相加II
解法1:听了代码随想录之后自己YY出来的解法(200+ms),有点慢
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int i=0,j=0,k=0,l=0,ans=0;
unordered_map<int,int> umap1,umap2;
for(const auto& item1:nums1){
for(const auto& item2:nums2){
umap1[item1+item2]++;
}
}
for(const auto& item3:nums3){
for(const auto& item4:nums4){
umap2[-item3-item4]++;
}
}
for(const auto& item1:umap1){
for(const auto& item2:umap2){
if(item1.first==item2.first){
ans+=(item1.second*item2.second);
}
}
}
return ans;
}
};
解法2:代码随想录的解法(170+ms),快了一点
class Solution {
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int ans=0;
unordered_map<int,int> umap1;
for(const auto& item1:nums1){
for(const auto& item2:nums2){
umap1[item1+item2]++;
}
}
for(const auto& item3:nums3){
for(const auto& item4:nums4){
if(umap1.count(0-item3-item4)){
ans+=umap1[(0-item3-item4)];
}
}
}
return ans;
}
};