454 四数相加

开始的想法是对a中的每个元素建立一个set,然后对去b中寻找负的set元素。但是由于有四个vector,操作起来很容易重复或者遗漏。于是去看解析。
我们先取a、b数组,然后两次循环求出所有可能的和(key)以及出现的次数(value),建立一个unorder_map sumab。然后对c、d数组求出所有可能的和,对这些和去sumab里面找其负数值,找到后其value就是次数。
空间复杂度为O(n^2),最坏情况是a和b求出的和各不相同;
时间复杂度为O(n^2)。

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {

        unordered_map<int,int> absum;

        for( int a : nums1)
            for( int b : nums2)
                absum[a+b]++;
            
        int count = 0;

         for( int c : nums3)
            for( int d : nums4)
                count += absum[ -c-d ];
        
        return count;
    }
};
posted @ 2025-01-13 20:03  名字好难想zzz  阅读(13)  评论(0)    收藏  举报