python3四数相加 II

python3四数相加 II

454. 四数相加 II

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

为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 – 1 之间,最终结果不会超过 231 – 1 。

例如:

输入:
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 = 0
  2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

思路

我们可以将四个数组分成两部分,AA 和 BB 为一组,CC 和 DD 为另外一组。

对于 AA 和 BB,我们使用二重循环对它们进行遍历,得到所有 A[i]+B[j]A[i]+B[j] 的值并存入哈希映射中。对于哈希映射中的每个键值对,每个键表示一种 A[i]+B[j]A[i]+B[j],对应的值为 A[i]+B[j]A[i]+B[j] 出现的次数。

对于 CC 和 DD,我们同样使用二重循环对它们进行遍历。当遍历到 C[k]+D[l]C[k]+D[l] 时,如果 -(C[k]+D[l])−(C[k]+D[l]) 出现在哈希映射中,那么将 -(C[k]+D[l])−(C[k]+D[l]) 对应的值累加进答案中。

最终即可得到满足 A[i]+B[j]+C[k]+D[l]=0A[i]+B[j]+C[k]+D[l]=0 的四元组数目。


class Solution:
    def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
        rst = 0
        dics = {
   }
        for a in A:
            for b in B:
                sum1 = a+b 
                dics[sum1] = dics.get(sum1,0)+1
        for c in C:
            for d in D:
                sum2 = c+d 
                if -sum2 in dics:
                    rst += dics[-sum2]
        return rst
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100103.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 菲尼克斯PSR-SCP- 24DC/FSP2/2X1/1X2耦合继电器

    菲尼克斯PSR-SCP- 24DC/FSP2/2X1/1X2耦合继电器菲尼克斯PSR-SCP-24DC/FSP2/2X1/1X2耦合继电器耦合继电器-PSR-SCP-24DC/FSP2/2X1/1X22986575适用于SIL2高需求和低需求应用的安全耦合继电器,将数字输出信号耦合至I/O端,2个启动电流通路,1个报警触点,用于安全状态关闭应用的模块,内置测试脉冲滤波器,插拔式螺钉连接端子,宽度:17.5mm产品类型 耦合继电器应用 安全关闭高要求低要求机械寿命 10×106开关次数继电器型号 带机械联锁触点的机电式继电器,符合IEC/EN6

    2022年6月22日
  • java重载与重写的区别_java重载和重写的区别和联系

    java重载与重写的区别_java重载和重写的区别和联系1.重写(Override)从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下,对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。2.重载(Overload)在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视.

    2022年9月9日
  • tinyxml 内存泄露_tinyxml 用法[通俗易懂]

    tinyxml 内存泄露_tinyxml 用法[通俗易懂]场景说明:创建一个空的xml文件,要求格式如下:代码如下:TiXmlElement*RootElement=NULL;TiXmlDocument*pDoc=NULL;pDoc=newTiXmlDocument();TiXmlDeclaration*pDeclaration=newTiXmlDeclaration((“1.0”),(“UTF-8”),(“”));pDoc-&…

    2022年6月9日
  • 精选推荐最新10个优秀源码下载网站超值收藏

    精选推荐最新10个优秀源码下载网站超值收藏以下十个网站是经本人精心收集,亲身体验过,才推荐给大家的。1.源码之家http://www.mycodes.net;;国内流量最大的源码下载站,下载点较多,速度一般,比较稳定,死链少2.果核网https://www.guohew.cn新兴的源码下载站,下载速度快.,源码更新速度较快、源码较全,还有模板、素材下载及一些不错的技术文章,是个值得收藏的站点!3.源码网http://www.yuanmawang.com新崛起的专业网站源码下载门户站,更新速度快较稳定,死链少,下载速度快….

    2022年7月20日
  • 计算机三级(数据库)备考题目知识点总结

    计算机三级(数据库)备考题目知识点总结计算机三级(数据库)备考题目知识点总结刷题所遇到的知识点总结考后总结刷题所遇到的知识点总结以下都是我在刷题时遇到的常考的知识点,供复习时做参考。1.DBAS需求分析阶段的一项重要工作是分析DBAS应具有的性能指标,主要包括:①数据操作响应时间,或数据访问响应时间;②系统吞吐量,即指系统在单位时间内可以完成的数据库事务或查询的数量;③允许并发访问最大用户数;④每TPS(PriceperTP…

    2022年6月21日
  • 前端最全面试题

    前端最全面试题今天给朋友们分享一到三年前端最全的面试题。JS基础题:JS的数据类型有哪些?答案见:JS数据类型详解如何判断JS变量的数据类型?typeof()instanceofconstructortoStringtypeof求解的可能值有哪些?“number”“string”“boolean”“undefined”“object”“symbol”“function”…

    2022年6月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号