4Sum II

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; } };
原文地址:https://www.cnblogs.com/JTechRoad/p/9024540.html