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)
上一篇 2021年4月16日 下午4:00
下一篇 2021年4月16日 下午8:00


相关推荐

  • Redis命令之hscan

    Redis命令之hscan1 业务背景在互联网的项目中为了提高性能和吞吐量 通常需要做一些优化和数据异构 比如查询 DB 我们可以优化索引 通过命中索引来提高查询速度 也可以把数据异构到 Redis 虽然 Redis 的性能非常好也支持 5 种数据结构 如果想性能更好的话 可以考虑异构到 JVM 缓存 也就是 DB 的数据异构到 Redis Redis 的数据定期异构到 JVM 缓存 2 带来问题在 Redis 中通过用一个 hashmap 来存储业务数据 当这些业务数据比较小 我们可以通过 hGetAll 来获取 redis 的整个 map 然后设

    2026年3月17日
    2
  • OSI七层协议大白话解读

    OSI七层协议大白话解读互联网的本质就是一系列的网络协议 这个协议就叫 OSI 协议 一系列协议 按照功能不同 分工不同 人为的分层七层 实际上这个七层是不存在的 没有这七层的概念 只是人为的划分而已 区分出来的目的只是让你明白哪一层是干什么用的 每一层都运行不同的协议 协议是干什么的 协议就是标准 实际上还有人把它划成五层 四层 七层划分为 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 五层

    2026年3月26日
    2
  • 怎么用豆包生成ppt?豆包做ppt的步骤详解!

    怎么用豆包生成ppt?豆包做ppt的步骤详解!

    2026年3月12日
    2
  • 数据ETL介绍

    数据ETL介绍本博客转载自 https www cnblogs com yjd hycf space p 7772722 html 几个名词 ODS OperationalD 操作型数据存储 DW DataWarehous 数据仓库 ETL 介绍 ETL 是将业务系统的数据经过抽取 清洗 转换之后加载到数据仓库的过程 目的是将企业中的分散 零乱 标准不统一的数据整合到一起 为企

    2026年3月19日
    2
  • matlab求一维热传导方程数值解代码,一维热传导方程数值解法及matlab实现

    matlab求一维热传导方程数值解代码,一维热传导方程数值解法及matlab实现实例简介 含 matlab 程序 个人感觉很有帮助 在研究传热学的可以下来看看能呈守恒定律 因为内部无热源 净流入的热量应该等于介质在此时间内温度升高所需要的热量 cdmdu dQ q x t g x dx t dtg x t dxdt comdt cpdd perdu q dxdtcpm 9 即 cPm2 9 2 q x t q x dx t xxIxX kCOL 由

    2025年10月17日
    2
  • win10快捷图标小箭头怎么恢复_win10恢复快捷方式小箭头

    win10快捷图标小箭头怎么恢复_win10恢复快捷方式小箭头regadd”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIcons”/v29/d”%systemroot%\system32\imageres.dll,197″/treg_sz/f  taskkill/f/imexplorer.exe  attrib-s…

    2022年10月18日
    4

发表回复

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

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