第454题.四数相加II

力扣题目链接(opens new window)

给定四个包含整数的数组列表 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 。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1 。

例如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

示例 2:

输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出:1

  提示:

  • n == nums1.length
  • n == nums2.length
  • n == nums3.length
  • n == nums4.length
  • 1 <= n <= 200
  • -228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228

思路

本题乍眼一看好像和0015.三数之和 (opens new window),0018.四数之和 (opens new window)差不多,其实差很多。

本题是使用哈希法的经典题目,而0015.三数之和 (opens new window),0018.四数之和 (opens new window)并不合适使用哈希法,因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果去重是很困难的,很有多细节需要处理。

而这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少!

如果本题想难度升级:就是给出一个数组(而不是四个数组),在这里找出四个元素相加等于0,答案中不可以包含重复的四元组,大家可以思考一下,后续的文章我也会讲到的。

本题解题步骤:

  1. 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 再遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。这里其实就是在找可以让nums3和nums4相加为0的相反数,这也是为什么是减号!
  5. 最后返回统计值 count 就可以了
class Solution {// 方法:计算四个数组中满足和为0的元组数量public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res = 0; // 初始化结果计数器// 创建哈希表存储前两个数组元素两两相加的和及其出现次数Map<Integer, Integer> map = new HashMap<Integer, Integer>();// 遍历nums1和nums2,计算所有两数之和for (int i : nums1) {          // 遍历第一个数组for (int j : nums2) {      // 遍历第二个数组int sum = i + j;       // 计算两数之和// 将和存入map:若存在则计数+1,不存在则初始化为1map.put(sum, map.getOrDefault(sum, 0) + 1);}}// 遍历nums3和nums4,查找互补和for (int i : nums3) {          // 遍历第三个数组for (int j : nums4) {      // 遍历第四个数组int complement = 0 - i - j; // 计算需要的互补值(使四数和为0)// 累加哈希表中互补值出现的次数(若不存在则加0)res += map.getOrDefault(complement, 0);}}return res; // 返回满足条件的元组总数}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93223.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93223.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93223.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣top100(day04-05)--堆

本文为力扣TOP100刷题笔记 笔者根据数据结构理论加上最近刷题整理了一套 数据结构理论加常用方法以下为该文章&#xff1a; 力扣外传之数据结构&#xff08;一篇文章搞定数据结构&#xff09; 215. 数组中的第K个最大元素 class Solution {// 快速选择递归函数int quickselect(…

CCS双轴相位偏移光源 让浅凹痕无处遁形

在工业检测中&#xff0c;浅凹痕表面检测对精度和可靠性要求极高&#xff0c;工业光源在此过程中扮演着关键角色&#xff0c;工业光源通过精准的光学设计&#xff08;角度、波长、强度&#xff09;将肉眼不可见的浅凹痕转化为可量化的光学信号&#xff0c;是实现高精度自动化检…

专题三_二分_x 的平方根

一&#xff1a;题目解释&#xff1a;返回x的算数平方根&#xff0c;如果是小数&#xff0c;则舍去小数部分&#xff0c;返回整数即可&#xff01;二&#xff1a;算法①&#xff1a;暴力从1开始求平方&#xff0c;最后要么直接找到一个值的平方为x&#xff0c;要么发现x在两个相…

Python 操作 Redis 的客户端库 redis-py

Python 操作 Redis 的客户端库 redis-py1. Installation2. Connect and test3. Connection Pools4. Redis Commands4.1. set(name, value, exNone, pxNone, nxFalse, xxFalse, keepttlFalse, getFalse, exatNone, pxatNone)4.1.1. setnx(name, value)4.1.2. setex(name, time, …

社区物业HCommunity本地部署手册

HC小区管理系统安装手动版 更多文章参考&#xff1a; http://www.homecommunity.cn/pages/hc/hcH5_cn.html 1.0 说明 很多开发不太喜欢用梓豪安装&#xff0c;希望通过手工自己安装&#xff0c;这个就需要开发人员 有一定的安装软件能力&#xff0c;比如能够自行安装mysql能…

单例模式-使用局部变量懒汉不用加锁

在 C11 及之后&#xff0c;“局部静态变量懒汉”&#xff08;Meyers’ Singleton&#xff09;不需要自己加锁&#xff0c;标准已经帮你做好了线程安全。 Singleton& getInstance() {static Singleton inst; // ← 这一句并发时只会初始化一次return inst; }首次调用时&am…

51单片机-GPIO介绍

本章概述思维导图&#xff1a;51单片机引脚介绍STC89系列51单片机引脚介绍STC89系列51单片机的引脚是单片机与外部电路连接的接口&#xff0c;用于实现电源供电、时钟信号输入、控制信号输出以及数据输入输出等功能。PDIP封装引脚图&#xff1a;1. 电源引脚&#xff1a;VCC&…

CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪

2025年8月15日CERT/CC&#xff08;计算机应急响应协调中心&#xff09;近日发布漏洞公告&#xff0c;警告多个HTTP/2实现中新发现的缺陷可能被威胁行为者用于发起高效拒绝服务&#xff08;DoS&#xff09;或分布式拒绝服务&#xff08;DDoS&#xff09;攻击。该漏洞被非正式命名…

[Chat-LangChain] 会话图(LangGraph) | 大语言模型(LLM)

第二章&#xff1a;会话图&#xff08;LangGraph&#xff09; 在第一章中&#xff0c;我们学习了前端用户界面——这是聊天机器人的"面孔"&#xff0c;我们在这里输入问题并查看答案。 我们看到了消息如何从聊天窗口传递到聊天机器人的"大脑"。现在&…

Flask错误处理与会话技术详解

flask入门day03 错误处理 1.abort函数&#xff1a;放弃请求并返回错误代码 详细状态码 from flask import Flask,abort,render_template ​ app Flask(__name__) ​ app.route(/) def index():return 我是首页 ​ app.route(/error) def error():abort(404)return 没有找到…

java程序打包成exe,再打成安装包,没有jdk环境下可运行

一、前提条件准备&#xff1a;1、要被打包的程序文件&#xff1a;rest_assistant-1.0-SNAPSHOT.jarapplication.yml2、图标文件tubiao123.ico3、jre4、打包成exe的软件 config.exe4j5、打成安装包的软件 Inno Setup Compiler二、config.exe4j 的 exe打包配置步骤 按照以下图进行…

区块链技术原理(11)-以太坊交易

文章目录什么是交易&#xff1f;交易类型交易生命周期关键概念&#xff1a;Gas 与交易费用交易状态与失败原因总结什么是交易&#xff1f; “交易&#xff08;Transaction&#xff09;” 是从一个账户向另一个账户发送的经过数字签名的指令 。例如&#xff0c;如果 Bob 发送 A…

小兔鲜儿-小程序uni-app(二)

小兔鲜儿-小程序uni-app7.小兔鲜儿 - 用户模块会员中心页(我的)静态结构参考代码会员设置页分包预下载静态结构退出登录会员信息页静态结构获取会员信息渲染会员信息更新会员头像更新表单信息8.小兔鲜儿 - 地址模块准备工作静态结构地址管理页地址表单页动态设置标题新建地址页…

BLE 广播信道与数据信道:冲突避免、信道映射与自适应跳频实现

低功耗蓝牙(BLE)技术凭借低功耗、短距离、低成本的特性,已广泛应用于智能家居、可穿戴设备、工业物联网等领域。在 BLE 协议中,信道管理是保障通信可靠性的核心机制,其中广播信道与数据信道的设计、冲突避免策略、跳频技术更是面试中的高频考点。本文将从基础原理到实战真…

nodejs03-常用模块

nodejs 常用的核心模块 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c; 它允许 JavaScript 运行在服务器端。Node.js 拥有丰富的标准库&#xff0c;也就是核心模块&#xff0c; 这些模块提供了各种功能&#xff0c; 使得开发服务器端应用程序变得简单高…

多路混音声音播放芯片型号推荐

以下是唯创知音旗下主流的多路声音播放芯片深度解析&#xff0c;结合精准参数、丰富场景及技术特性&#xff0c;满足智能设备多样化音频需求&#xff1a;一、WTV380/890 系列&#xff1a;高集成多模态交互芯片核心参数通道能力&#xff1a;支持8 路独立语音输出&#xff0c;可同…

【C++】自研基 2 Cooley–Tukey

“自研基 2 Cooley–Tukey&#xff1a;倒位序 逐级蝶形&#xff0c;入口 fft(int N, complex f[])”拆成三件事它在讲什么 “基 2 Cooley–Tukey” 指的是最常见的 FFT 算法&#xff1a;长度 N 必须是 2 的整数次幂&#xff0c;把离散傅里叶变换分解成一层一层的“2 点蝶形”运…

小白挑战一周上架元服务——ArkUI04

文章目录前言一、ArkUI是何方神圣&#xff1f;二、声明式UI三、组件1.基础组件2.布局容器组件3.导航组件4.自定义组件5.组件生命周期四、状态管理1.State装饰器: 状态变量2.Prop装饰器&#xff1a;父子单向同步3.Link装饰器&#xff1a;父子双向同步4.Provide/Consume装饰器&am…

剧本杀小程序系统开发:构建剧本杀社交新生态

在社交需求日益多样化的今天&#xff0c;剧本杀凭借其独特的社交属性&#xff0c;成为了人们热衷的社交娱乐方式之一。而剧本杀小程序系统开发&#xff0c;则进一步拓展了剧本杀的社交边界&#xff0c;构建起一个全新的剧本杀社交新生态&#xff0c;让玩家在推理与角色扮演中&a…

AI提高投放效率的核心策略

内容概要人工智能技术正深刻改变着广告投放领域&#xff0c;其核心价值在于显著提升投放效率。通过融合智能算法优化、实时数据分析与自动化投放流程&#xff0c;AI系统能够以前所未有的速度和精度处理海量信息&#xff0c;驱动更精准的营销决策。这不仅大幅缩短了传统人工操作…