哈希表题目:数组中的 k-diff 数对
文章目录
- 题目
- 标题和出处
- 难度
- 题目描述
- 要求
- 示例
- 数据范围
- 解法
- 思路和算法
- 代码
- 复杂度分析
题目
标题和出处
标题:数组中的 k-diff 数对
出处:532. 数组中的 k-diff 数对
难度
4 级
题目描述
要求
给定一个整数数组 nums\texttt{nums}nums 和一个整数 k\texttt{k}k,返回不同的 k\texttt{k}k-diff 数对的数目。
一个 k\texttt{k}k-diff 数对为一个整数对 (nums[i],nums[j])\texttt{(nums[i], nums[j])}(nums[i], nums[j]),并满足下述条件:
- 0≤i,j<nums.length\texttt{0} \le \texttt{i, j} < \texttt{nums.length}0≤i, j<nums.length
- nums[i]≤nums[j]\texttt{nums[i]} \le \texttt{nums[j]}nums[i]≤nums[j]
- |nums[i]-nums[j]|=k\texttt{|nums[i] - nums[j]|} = \texttt{k}|nums[i] - nums[j]|=k
注意,|val|\texttt{|val|}|val| 表示 val\texttt{val}val 的绝对值。
示例
示例 1:
输入:nums=[3,1,4,1,5],k=2\texttt{nums = [3, 1, 4, 1, 5], k = 2}nums = [3, 1, 4, 1, 5], k = 2
输出:2\texttt{2}2
解释:数组中有两个 2\texttt{2}2-diff 数对,(1,3)\texttt{(1, 3)}(1, 3) 和 (3,5)\texttt{(3, 5)}(3, 5)。
尽管数组中有两个 1\texttt{1}1,但我们只应返回不同的数对的数量。
示例 2:
输入:nums=[1,2,3,4,5],k=1\texttt{nums = [1, 2, 3, 4, 5], k = 1}nums = [1, 2, 3, 4, 5], k = 1
输出:4\texttt{4}4
解释:数组中有四个 1\texttt{1}1-diff 数对,(1,2)\texttt{(1, 2)}(1, 2),(2,3)\texttt{(2, 3)}(2, 3),(3,4)\texttt{(3, 4)}(3, 4) 和 (4,5)\texttt{(4, 5)}(4, 5)。
示例 3:
输入:nums=[1,3,1,5,4],k=0\texttt{nums = [1, 3, 1, 5, 4], k = 0}nums = [1, 3, 1, 5, 4], k = 0
输出:1\texttt{1}1
解释:数组中只有一个 0\texttt{0}0-diff 数对,(1,1)\texttt{(1, 1)}(1, 1)。
数据范围
- 1≤nums.length≤104\texttt{1} \le \texttt{nums.length} \le \texttt{10}^\texttt{4}1≤nums.length≤104
- -107≤nums[i]≤107\texttt{-10}^\texttt{7} \le \texttt{nums[i]} \le \texttt{10}^\texttt{7}-107≤nums[i]≤107
- 0≤k≤107\texttt{0} \le \texttt{k} \le \texttt{10}^\texttt{7}0≤k≤107
解法
思路和算法
由于题目要求计算数组 nums\textit{nums}nums 中的不同的差为 kkk 的数对的数目,因此只需要考虑数组中有哪些数字,不需要考虑顺序。
计算差为 kkk 的数对的数目需要考虑两种情况,分别是 k=0k = 0k=0 和 k>0k > 0k>0。
当 k=0k = 0k=0 时,每个差为 kkk 的数对由两个相等的整数组成,对于任意整数 num\textit{num}num,只有当 num\textit{num}num 在数组 nums\textit{nums}nums 中出现次数大于 111 次时,才有数对 (num,num)(\textit{num}, \textit{num})(num,num)。遍历数组 nums\textit{nums}nums 并用哈希表记录每个数字的出现次数,然后遍历哈希表,对于哈希表中的每个数字,如果出现次数大于 111 次,则将数对的数目加 111。遍历哈希表结束之后即可得到差为 kkk 的数对的数目。
当 k>0k > 0k>0 时,每个差为 kkk 的数对由两个不相等的整数组成,对于任意整数 num\textit{num}num,当 num\textit{num}num 和 num+k\textit{num} + knum+k 都在数组中出现时,有数对 (num,num+k)(\textit{num}, \textit{num} + k)(num,num+k)。遍历数组 nums\textit{nums}nums 并用哈希集合记录出现的数字,然后遍历哈希集合,对于哈希集合中的每个数字 num\textit{num}num,如果 num+k\textit{num} + knum+k 也在哈希集合中,则将数对的数目加 111。遍历哈希集合结束之后即可得到差为 kkk 的数对的数目。
代码
class Solution {public int findPairs(int[] nums, int k) {int pairs = 0;if (k == 0) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int num : nums) {map.put(num, map.getOrDefault(num, 0) + 1);}Set<Integer> set = map.keySet();for (int num : set) {if (map.get(num) > 1) {pairs++;}}} else {Set<Integer> set = new HashSet<Integer>();for (int num : nums) {set.add(num);}for (int num : set) {if (set.contains(num + k)) {pairs++;}}}return pairs;}
}
复杂度分析
-
时间复杂度:O(n)O(n)O(n),其中 nnn 是数组 nums\textit{nums}nums 的长度。需要遍历数组一次,使用哈希表或哈希集合存储数组中的不同数字,然后遍历哈希表或哈希集合一次,由于哈希表或哈希集合中的元素个数不超过数组长度,因此时间复杂度是 O(n)O(n)O(n)。
-
空间复杂度:O(n)O(n)O(n),其中 nnn 是数组 nums\textit{nums}nums 的长度。需要使用哈希表或哈希集合存储数组中的不同数字,最坏情况下需要存储数组中的全部数字。
相关文章:
哈希表题目:数组中的 k-diff 数对
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:数组中的 k-diff 数对 出处:532. 数组中的 k-diff 数对 难度 4 级 题目描述 要求 给定一个整数数组 nums\texttt{nums}nums 和一个整数 k…...
SAP ERP系统PP模块计划策略2050详解
SAP/ERP系统中面向订单生产的计划策略主要有20和50两个策略,这两个策略都是面向订单生产的计划策略,也是离散制造行业应用比较广泛的策略。它们之间最大差异就是在于20策略完全是由订单驱动,而50策略是预测加订单驱动,本文主要介绍…...
TIA博途中将硬件目录更改为中文的具体方法演示
TIA博途中将硬件目录更改为中文的具体方法演示 基本步骤可参考如下: 第一步: 第二步: 具体的操作演示: 如下图所示,在所示的目录中找到zh-chs文件夹,删除或修改文件夹的名称均可,这里建议大家修改文件夹的名称,防止以后需要恢复成英文目录, 如下...
【多线程操作】线程池模拟实现
目录 一.线程池的作用 二.线程池的模拟实现 1.线程模块(Thread.hpp): 2.线程锁模块(LockGuard.hpp): 3.任务模块(Task.hpp) 4.线程池核心(ThreadPool.hppÿ…...
HBase---Hbase安装(单机版)
Hbase安装单机版 文章目录Hbase安装单机版Master/Slave架构安装步骤配置Hbase1.上传压缩包解压更名修改hbase-env.sh修改hbase-site.xml配置HBase环境变量配置Zookeeper复制配置文件修改zoo.cfg配置文件修改myid配置Zookeeper环境变量刷信息配置文件启动hbase步骤hbase shellMa…...
启动项管理工具Autoruns使用实验(20)
实验目的 (1)了解注册表的相关知识; (2)了解程序在开机过程中的自启动; (3)掌握Autoruns在注册表和启动项方面的功能;预备知识 注册表是windows操作系统中的一个核心数据…...
BFD单臂回声实验详解
13.1.1BFD概念 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个系统之间建立BFD会…...
详解JAVA类加载器
目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类…...
记录一些常用C标准库函数,以及Linux系统调用函数的作用(不断更新)
C标准库函数 perror() 函数 作用:perror函数是C标准库中的一种函数,用于在STDERR(标准错误输出流)中输出给定的错误信息字符串。它不属于Linux系统调用函数。 具体使用方法:perror("调用的函数名") 所需…...
RK3568平台开发系列讲解(显示篇)DRM的atomic接口
🚀返回专栏总目录 文章目录 一、Property二、Standard Properties三、代码案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢目前DRM主要推荐使用的是 Atomic(原子的) 接口。 一、Property Property(属性)—– Atomic操作必须依赖的基本元素 Property把前面的…...
2022年MathorCup数学建模C题自动泊车问题解题全过程文档加程序
2022年第十二届MathorCup高校数学建模 C题 自动泊车问题 原题再现 自动泊车是自动驾驶技术中落地最多的场景之一,自动泊车指在停车场内实现汽车的自动泊车入位过程,在停车空间有限的大城市,是一个比较实用的功能,减少了驾驶员将…...
【需求响应】基于数据驱动的需求响应优化及预测研究(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
Bellman-ford和SPFA算法
目录 一、前言 二、Bellman-ford算法 1、算法思想 2、算法复杂度 3、判断负圈 4、出差(2022第十三届国赛,lanqiaoOJ题号2194) 三、SPFA算法:改进的Bellman-Ford 1、随机数据下的最短路问题(lanqiaoOJ题号1366&…...
假如你知道这样的MySQL
数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系 统都满足第一范式数据库表中的字段都是单一属性的,不可再分)第二范式(2NF)是在第一范式(1NF)的…...
SpringBoot笔记(一)入门使用
一、为什么用SpringBootSpringBoot优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XMLSpringBoot缺点人称版本帝,迭代快,需要时…...
C++20 协程体验
1 介绍协程是比线程更加轻量级并发编程方式,CPU资源在用户态进行切换,CPU切换信息在用户态保存。协程完成异步的调用流程,并对用户展示出同步的使用方式。协程的调度由应用层决定,所以不同的实现会有不同的调度方式,调度策略比较灵…...
这三个小事你做HIGG FEM时要知道
【这三个小事你做HIGG FEM时要知道】1.为什么做了Higg FEM 自评后要做验证?「自评 验证」Higg FEM 是一个持续改善的框架方法,来帮助工厂实现持续的环保改善,是一个最基本的要求,如果工厂期望得到一个更加客观的评价,…...
.net6 wpf程序一个内存不断增长问题的解决方法
一个.net6的应用程序,底层不断采集数据。使用wpf制作了一个简单的界面显示数据接收的情况。程序中引用了 Material Design UI框架。当程序长时间运行时发现内存在不断增长。一个星期后工作集占用内存达到1GB。使用dotnet-dump工具收集内存使用情况,并且分…...
NICEGUI---ROS开发之中常用的GUI工具
0. 简介 对于ROS来说,如果不具备一定知识的人员来使用这些我们写的算法,如果说没有交互,这会让用户使用困难,所以我们需要使用GUI来完成友善的数据交互,传统的GUI方法一般有PYQT这类GUI方法,但是这类GUI工…...
高盐废水除钙镁的技术解析
高盐废水指含有机物和至少总溶解固体(totaldissolvedsolids,tds)的质量分数大于3.5%的废水,具有水量大,无机盐离子k、na、ca2、mg2、cl-、so42-等含量高,水质水量变化大,成分复杂,难生化降解等特…...
ChatClient 全家桶保姆级博客讲解
最近 Spring AI 迭代很快,从原来的 ChatModel 转向了更易用的 ChatClient API。如果你看到这串名词:ChatClient、default、Options、Functions、Tools、System&User、Advisors,肯定会说好多名词啊。不急,慢慢来。一、先搞懂&a…...
视频文件修复全攻略:如何用Untrunc工具抢救损坏的MP4/MOV文件
视频文件修复全攻略:如何用Untrunc工具抢救损坏的MP4/MOV文件 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 当你打开存储着家庭聚会回忆的视频文件时&…...
Windows 下 Docker Desktop 安装教程及常用命令(2026 最新)
Windows 安装 Docker 核心是 Docker Desktop WSL2(推荐),家庭版 / 专业版通用,性能好、最稳定,下面是详细步骤。 一、系统与硬件要求 1. 1、系统版本 Windows 10 64 位:家庭 / 专业 / 企业 22H2&#x…...
从CLPM到RI-CLPM:Mplus中交叉滞后模型的进阶指南与选择策略
从CLPM到RI-CLPM:纵向数据分析的模型选择与实战解析 在心理学和行为科学的纵向研究中,交叉滞后模型(CLPM)长期以来是分析变量间相互影响关系的标准工具。然而,随着研究方法论的进步,研究者们逐渐认识到传统…...
实战教学应用:基于快马平台开发生物繁殖课互动学习与测评系统
作为一名生物老师,我一直在寻找能够让学生更直观理解繁殖知识的教学工具。最近尝试用InsCode(快马)平台开发了一个互动学习系统,效果出乎意料的好。这个平台最棒的地方是,不需要复杂的服务器配置,就能把想法快速变成可实际使用的教…...
nli-distilroberta-base企业应用:HR简历筛选中‘要求’与‘经历’逻辑匹配系统
nli-distilroberta-base企业应用:HR简历筛选中要求与经历逻辑匹配系统 1. 项目背景与价值 在人力资源招聘流程中,简历筛选是最耗时的工作环节之一。传统的人工筛选方式面临两大核心痛点: 效率低下:HR需要逐份阅读简历ÿ…...
企业内部是否需要技术团队做小程序
企业内部是否需要技术团队做小程序一、企业在推进小程序时的现实问题在实际业务中,越来越多企业开始考虑通过小程序拓展线上渠道,但在推进过程中,往往会遇到一个核心问题:企业内部是否需要组建技术团队来完成小程序开发。这一问题…...
深入TC397与TLF35584的SPI通信:从寄存器操作到汽车ECU低功耗状态管理实战
深入TC397与TLF35584的SPI通信:从寄存器操作到汽车ECU低功耗状态管理实战 在汽车电子领域,电源管理芯片的选择与配置直接关系到整车电子控制单元(ECU)的可靠性与能耗表现。英飞凌的TLF35584作为一款高集成度电源管理IC,…...
毫米波雷达测速的“火眼金睛”:从汽车ACC到手势识别,Doppler FFT如何分辨不同速度的目标?
毫米波雷达测速的“火眼金睛”:从汽车ACC到手势识别,Doppler FFT如何分辨不同速度的目标? 在自动驾驶汽车的前方,一辆卡车突然减速,而右侧车道有摩托车正在加速超车——毫米波雷达如何在这复杂的场景中,准确…...
如何将Uvicorn部署到Azure Functions Premium Plan:完整指南
如何将Uvicorn部署到Azure Functions Premium Plan:完整指南 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn是Python生态中备受推崇的ASGI Web服务器ÿ…...
