ok
看题
题目很简单,也很容易理解,就是给你四个相同长度的数组,让你在每个数组中找到一个值可以满足所加和为0即可。
虽然题目很简单,感觉可以用四川循环直接暴力,但是作为中等题,难点就到了时间复杂度这一步。接下来看代码,引用评论区一位哥们的话,就是每次看题解后,就觉得自己是个傻子。
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
int ans=0;//这是一个记录满足情况的计数器
map<int,int> m;//定义一个map存放相加之和出现次数。
for(auto a:A)for(auto b:B)m[a+b]++;//将原本的四层循环改为两个二层循环
//这里是计算A,B数组两个数的和,计算出就在map中加次数,一个和的结果出现次数
for(auto c:C)for(auto d:D)ans+=m[-(c+d)];
//既然A,B数组已经算出来了,那么我们的目的是找到和为0的次数
//那么我们这边只需要找到C,D和是A,B和的相反数的次数就可以了这样就可以ans为相加为0的次数。
return ans;
}
};