454. 4Sum II
题意:给四个数组,每个数组内取一个数使得四个数和为0,问有多少种取法
思路:枚举为On4,考虑两个数组,On2枚举所有可能的和,将和的出现次数存入map中,On2枚举另两个数组,看是否加和为0
class Solution { public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { int na = A.size(), nb = B.size(), nc = C.size(), nd = D.size(); int cnt = 0; map<int, int> mp; for (int i = 0; i < na; i++) { for (int j = 0; j < nb; j++) { int sum = A[i] + B[j]; if (mp[-sum]) mp[-sum]++; else mp[-sum] = 1; } } for (int i = 0; i < nc; i++) { for (int j = 0; j < nd; j++) { int sum = C[i] + D[j]; if (mp[sum]) cnt += mp[sum]; } } return cnt; } };
原文:https://www.cnblogs.com/pinkglightning/p/10323119.html