写点什么

LeetCode-454. 四数相加 II(Java)

作者:bug菌
  • 2022 年 9 月 11 日
    上海
  • 本文字数:1968 字

    阅读完需:约 6 分钟

LeetCode-454. 四数相加 II(Java)

​一、前言:

👨‍🎓作者:bug 菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系 bug 菌处理。

       哈喽,小伙伴们,我是 bug 菌呀👀。金三银四,又到了刷题月啦。所以不管你是准备跳槽还是在职,都一起行动起来,顺应这个时代月干点该干的事儿👣。所以,赶紧跟着 bug 菌的步伐卷起来吧⏰,变强从这一刻开始!➕🧈

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对 bug 菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

二、题目描述:

​​

LeetCode 题号:454. 四数相加 II

描述:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

例如:

输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]

输出:2

解释:两个元组如下:1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 02. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

三、思路分析:

        先定义一个 map,key 存放任意两组数组各两数之和,value 存两数之和出现的次数;再遍历剩下两组,判断 map 中是否存在 key(这里需要注意以下,取 c+d 之和的相反数去判断该 key 是否存在于 map 中),存在即 returnCount 加该 key 的次数 ;详情看代码!如下:

四、算法实现:

class Solution {    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {        int count = 0;        //计算出所有a+b之和的情况,value存出现次数        HashMap<Integer, Integer> map_ab = new HashMap<Integer, Integer>(16);        for (int a : A) {            for (int b : B) {                int value_ab = a + b;                //判断key是否存在                boolean ok = map_ab.containsKey(value_ab);                if (!ok) {                    map_ab.put(value_ab, 1);                } else {                    //存在key,次数加一                    map_ab.put(value_ab, map_ab.get(value_ab) + 1);                }            }        }        //遍历cd取c+d        for (int c : C) {            for (int d : D) {                int value_cd = c + d;                //先判断是否存在key;要求相加为零,特地key取反;若存在,则满足a+b+c+d = 0;                boolean ok = map_ab.containsKey(-value_cd);                //不存在,直接跳出此次循环                if (!ok) {                    continue;                }                //key对应的value                int mu = map_ab.get(-value_cd);                count += mu;            }        }        return count;    }}
复制代码

五、总结:

如下是 leetcode 提交截图:请大家悉知。

         综上所述,四数相加其实就是考察你的思维,前两数相加,然后再取后两数相加的相反数,进行匹配即可解题。如果是你们,你们会采用这种思路吗。

        再者,解题道路千万条,小伙伴们,你们如果有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。

        好啦,以上就是本期的所有内容啦,咱们下期见咯。

六、热门推荐:

  1. leetcode-9.回文数

  2. leetcode-1.两数之和

  3. leetcode-13.罗马数字转整数

  4. leetcode-14.最长公共前缀

  5. leetcode-20.有效的括号

  6. leetcode-21.合并两个有序链表

  7. leetcode-26. 删除有序数组中的重复项


七、文末:

        如果你还想要学习更多,小伙伴们大可关注 bug 菌专门为你们创建的专栏,带着你一块儿刷题《每日一题LeetCode》

        一个人刷可能会觉得很累很难坚持,但是一群人刷就会觉得它是一件很有意义的事儿,互相督促互相鼓励,一起变强。

最后送大家两句话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以 start,

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。




点击并拖拽以移动

​编辑​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢 bug 菌分享的文章,就请给 bug 菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ 交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

发布于: 刚刚阅读数: 3
用户头像

bug菌

关注

公众号 | 猿圈奇妙屋 2020.07.30 加入

在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。

评论

发布
暂无评论
LeetCode-454. 四数相加 II(Java)_9月日更_bug菌_InfoQ写作社区