看完的想法就是暴力解, 不过 不用想都知道超时了
想了一会还是没有思路
就去学习一下别人怎么做的, 感觉就是二数相加 再灵活一点, 这没想到, 还是练得少了
四个数组 两两分组, 第一组 遍历 相加 将各个和的个数存入map中
第二组 查找 0于各个和的差值是否出现在map中, 如果出现说明该组合满足条件 count + 1,继续遍历 直到结束, 返回count
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
// 把四个数组 分为两两一组
unordered_map<int, int> ans1;
for (int a : nums1)
for (int b : nums2)
++ans1[a + b];
unordered_map<int, int> ans2;
int count = 0;
for (int a : nums3)
for (int b :nums4)
if (ans1.find(0 - a - b) != ans1.end())
count += ans1.find(0 - a - b)->second;
return count;
}
};