LeetCode || Hash

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;
    }
};
View Code

猜你喜欢

转载自www.cnblogs.com/pinkglightning/p/10323119.html
今日推荐