我的力扣算法454-四数相加Ⅱ

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值