哈希-力扣454.四数相加Ⅱ

题目

给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

示例 1:

输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出:2
解释:
两个元组如下:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[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
  • -2^28 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 2^28

思路

这题我们要求的是满足四数之和等于0的下表元组个数,由于数组相互分立,我们不需要考虑去重的影响,所以我们可以运用a+b+c+d=0可以转化为a+b=-(c+d),先存a+b的和然后遍历-(c+d),如果发现map中存在该key,我们就给计数器加上对应的数量也就是value,下面根据笔者的代码进行进一步的了解。

代码实现 

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int,int>mp;//设置map哈希表int count=0;//计数器for(int a:nums1){for(int b:nums2){mp[a+b]++;//将nums1 nums2中的元素加和存起来}}for(int c:nums3){for(int d:nums4){//由于a+b+c+d=0可以转化为a+b=-(c+d)if(mp.find(-(c+d))!=mp.end())//如果发现map中存在-(c+d),那么将对应的数量加起来count++;}}//并且这道题只要求下表,所以不用去重,直接加和即可return count;}
};

反思

本题采用unordered_map该哈希表,运用该哈希表,我们实现了两两分组加和的计数和查找,通过等价转换我们可以简化很多问题,如果采用暴力循环的话,会导致时间复杂度太高,运用该种方式,有效的降低了时间复杂度

尾声

本篇文章是哈希算法的续篇,通过本道题目,笔者希望和读者共同学会哈希表的运用和加深对哈希表的认识和理解,为我们后面的三数之和,四数之和打下了基础。如果觉得笔者写的还不错的话,记得留下你的点赞关注和收藏哦~

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

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

相关文章

数据结构第十一弹---堆

堆 1、堆的概念及结构2、堆的性质3、堆的调整算法3.1、向下调整算法3.2、向上调整算法 4、堆的实现4.1、头文件包含和结构定义4.2、初始化4.3、销毁4.4、插入数据4.5、删除数据 删除堆顶4.6、获取堆顶元素4.7、获取有效数据个数4.8、判断是否为空 5、代码汇总5.1、Heap.h5.2、H…

好用的设备租赁管理软件有哪些?

“我们公司是做设备租赁的&#xff0c;想找一款适合设备租赁的库存管理软件&#xff0c;最好有库存管理&#xff0c;客户信息&#xff0c;设备外调管理&#xff0c;租赁天数管理&#xff0c;设备的借出与归还信息管理与查询。” 总结一下—— 库存管理客户信息管理设备租赁管…

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言 Certbot是一款免费且开源的自动化安全证书管理工具&#xff0c;由电子前沿基金会&#xff08;EFF&#xff09;开发和维护&#xff0c;是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…

38.深入MySQL

深入MySQL 索引 索引是关系型数据库中用来提升查询性能最为重要的手段。关系型数据库中的索引就像一本书的目录&#xff0c;我们可以想象一下&#xff0c;如果要从一本书中找出某个知识点&#xff0c;但是这本书没有目录&#xff0c;这将是意见多么可怕的事情&#xff01;我们…

JVM如何执行synchronized修饰的方法

首先市面上关于synchronized的资料已经很多了&#xff0c;但是大家对于底层的原理实现可能没有什么概念&#xff0c;大多都是死记硬背&#xff0c;所以我想通过实战的方式给大家带来一些不一样的体验。具体体现在哪些方面呢&#xff1f; 更系统。市面上目前虽然资料众多&#x…

WPF 入门教程DispatcherTimer计时器

https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中&#xff0c;有一个名为 Timer 的控件&#xff0c;它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性&#xff0c;但我们有DispatcherTimer控件&#xff0c;而不是不可见的控件。它几…

15-链表-环形链表 II

这是链表的第15题&#xff0c;力扣链接。 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链…

中科驭数诚邀您参加第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)

低时延技术是证券基金期货领域业务系统的核心技术&#xff0c;是打造极速交易系统领先优势的关键&#xff0c;也是证券基金行业关注的前沿技术热点。 继去年圆满举办首届证券基金行业先进计算技术大会之后&#xff0c;在中国计算机学会集成电路设计专委、先进计算产业联盟、证…

在macos上查看当前进程的栈信息

概述 在调试程序时&#xff0c;如cpu莫名的高或低&#xff0c;一个常用的方式就是打印当前进行的调用栈&#xff0c;然后确认各线程的执行函数是否有异常。 在linux系统中可以使用pstack命令&#xff0c;直接打印各线程的栈信息&#xff0c;可惜在macos上没有该命令。一种解决…

25 心形按钮

效果演示 实现了一个心形的心形图案&#xff0c;当用户点击图案时&#xff0c;图案会旋转并缩小&#xff0c;同时背景颜色会变成白色。 Code <div class"love"><input id"switch" type"checkbox"><label class"love-heart&…

049.Python包和模块_虚拟环境超详细讲解

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

二叉树的层序遍历经典问题(算法村第六关白银挑战)

基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入…

Java顺序表(1)

&#x1f435;本篇文章将对顺序表中的方法进行模拟实现 一、线性表 线性表是指在逻辑结构上呈连续的线性结构&#xff0c;而在物理结构上不一定是连续的结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列等 二、顺序表 顺序表一般采用数组来存储数据&#x…

【STM32】| 01——常用外设 | USART

系列文章目录 【STM32】| 01——常用外设 | USART 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 基础理论1.1 并行通信和串行通信1.2 同步通信和异步通信1.3 单工/半双工/全双工1.4 电平信号(RS232/TTL)和差分信号(RS485)1.5 端口(COM) 2. 串口理论2.1 串口物理…

Springboot+RocketMQ通过事务消息优雅的实现订单支付功能

目录 1. 事务消息 1.1 RocketMQ事务消息的原理 1.2 RocketMQ订单支付功能设计 1. 事务消息 RocketMQ的事务消息&#xff0c;是指发送消息事件和其他事件需要同时成功或同时失败。比如银行转账&#xff0c; A银行的某账户要转一万元到B银行的某账户。A银行发送“B银行账户增加…

高级分布式系统-第3讲 网络与网络互联

万维网的诞生 1957年10月4日&#xff0c; 苏联发射了人类第一颗人造卫星—斯普特尼克一号 美国政府震惊不已。 他们认为&#xff0c; 在日趋激烈的冷战对抗中&#xff0c; 自己已经全面落后于苏联。 为了扭转这一局面&#xff0c; 美国国防部很快于1958 年 2 月组建了一个神秘…

Fastdata极数公司介绍

【写在开头】 前不久看到一句话和一个新闻&#xff0c;“数据作为主要生产要素&#xff0c;以资源化为起点&#xff0c;经历资产化、资本化阶段&#xff0c;逐步实现数据价值。” 2023年10月25日&#xff0c;国家数据局正式揭牌&#xff0c;由国家发展和改革委员会管理。 初看…

linux安装node.js

先去官网下载对应的版本 官网&#xff1a;https://nodejs.org/en/download 选择对应的版本&#xff0c;点这个&#xff0c;直接去虚拟机上面安装 # apt的系统 apt install -y wget # yum的系统 yum install -y wget下载包 wget https://nodejs.org/dist/v20.10.0/node-v20.…

【小白专用】(C#)用户、角色、权限控制体系

我们在开发很多项目的时候,都会用到用户权限管理,我也在很多项目里做过权限控制,所以,我也总结出一套条理清晰的角色权限控制体系。本文采用RBAC&#xff08;Role Based Access Control&#xff09;的基本思想&#xff0c;RBAC&#xff08;角色访问控制&#xff09;的基本思想可…

Java可视化大屏智慧工地云平台源码(SaaS模式)

智慧工地是一种崭新的工程现场一体化管理模式&#xff0c;是互联网与传统建筑行业的深度融合。它充分利用移动互联、物联网、云计算、大数据等新一代信息技术&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0c;彻底改变传统建筑施工现场参建各方现场管理的交互方…