参考链接:代码随想录: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)];//这里不能写ans+=umap1.count(0-item3-item4)}}}return ans;}
};