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

浙公网安备 33010602011771号