https://leetcode.com/submissions/detail/153740275/
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> CD_freq;
for (auto i : C)
for (auto j : D)
CD_freq[i+j]++;
int res = 0;
for (auto a : A)
for (auto b : B) {
auto it = CD_freq.find(-(a+b));
if (it != CD_freq.end())
res += it->second;
}
return res;
}
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> CD_freq;
for (auto i : C)
for (auto j : D)
CD_freq[i+j]++;
int res = 0;
for (auto a : A)
for (auto b : B)
res += CD_freq[-(a + b)]; // If CD_freq[-(a+b)] doesn't exist, it will be added! So map becomes much bigger!!!
return res;
}
int fourSumCount_n3(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> D_freq;
for (auto i : D)
D_freq[i]++;
int res = 0;
for (int i = 0; i < A.size(); i++)
for (int j = 0; j < B.size(); j++)
for (int k = 0; k < C.size(); k++)
res += D_freq[-(A[i] + B[j] + C[k])];
return res;
}
int fourSumCount_n4(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
int res = 0;
for (int i = 0; i < A.size(); i++)
for (int j = 0; j < B.size(); j++)
for (int k = 0; k < C.size(); k++)
for (int l = 0; l < D.size(); l++)
if (A[i] + B[j] + C[k] + D[l] == 0)
res++;
return res;
}
};