代码随想录算法【Day7】

DAY7

454.四数相加II

特点:

1.只用返回元组的个数,而不用返回具体的元组

2.可以不用去重

暴力思路:遍历,这样时间复杂度会达到O(n^4)

标准思路:用哈希法(场景:在一个集合里面判断一个元素是否出现过)

先遍历数组A、B,统计a+b的结果以及这个结果出现的次数,然后遍历数组C、D,判断0-(c+d)有没有在a+b的集合里面出现过。

复制代码
class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int, int> umap; //<key, value>分别代表a+b的值,和这个值出现的次数
        for(int a : nums1)
            for(int b : nums2)
                umap[a + b] ++;
        //当访问一个不存在的键时,map 会自动为这个键创建一个新条目
        //新条目的值会被默认初始化,对于整型(int),默认初始化的值就是 0
        //所以不用去考虑给umap[a + b]设置一个初始值
        int count = 0; //最后的结果
        for(int c : nums3)
            for(int d :nums4)
                if(umap.find(0 - (c + d)) != umap.end())
                    count += umap[0 - (c + d)];
        return count;
    }
};
相关推荐
WolfGang00732113 分钟前
代码随想录算法训练营Day27 | 56.合并区间、738.单调递增的数字、968.监控二叉树
算法
信奥卷王44 分钟前
2025年9月GESPC++三级真题解析(含视频)
开发语言·c++·算法
努力学习的小廉1 小时前
我爱学算法之—— BFS之FLoodFill算法
算法·宽度优先
天选之女wow1 小时前
【Hard——Day8】65.有效数字、68.文本左右对齐、76.最小覆盖子串
linux·运维·redis·算法·leetcode
AI大模型学徒1 小时前
NLP基础(八)_马尔可夫模型
算法·机器学习·自然语言处理·nlp·概率论·马尔可夫模型
前端小L2 小时前
图论专题(十八):“逆向”拓扑排序——寻找图中的「最终安全状态」
数据结构·算法·安全·深度优先·图论·宽度优先
前端小L2 小时前
图论专题(十七):从“判定”到“构造”——生成一份完美的「课程表 II」
算法·矩阵·深度优先·图论·宽度优先
qq_433554542 小时前
C++ 稀疏表
开发语言·c++·算法
2501_941800882 小时前
5G技术引领下的智能制造革命:如何推动工业4.0发展
leetcode
小白程序员成长日记3 小时前
2025.11.21 力扣每日一题
算法·leetcode·职场和发展