LeetCode如何解决数组中K-diff数对的问题
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,小编给大家分享一下LeetCode如何解决数组中K-diff数对的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、题目描述给定一个整数数组和一个整数 k, 你需要在数组里找到不
千家信息网最后更新 2025年12月02日LeetCode如何解决数组中K-diff数对的问题
小编给大家分享一下LeetCode如何解决数组中K-diff数对的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
一、题目描述
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k。
示例 1:
输入: [3, 1, 4, 1, 5], k = 2 输出: 2
解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个 1,但我们只应返回不同的数对的数量。
二、解题思路
利用两个数的绝对值之差为 k 的关系 x - y = k,推出 y = x - k 和 x = y + k:
saw 集合保存访问过的元素 diff 集合保存已找到的 k-diff 数对中的较小值 遍历所有元素,判断当前元素是否符合下面 2 个条件之一 如果 y = x - k (1 = 3 - 2) 在 saw 中,则在 diff 中加入较小值 x - k = 1 如果 x = y + k (3 = 1 + 2)在 saw 中,则在 diff 中加入较小值 y = 1 在 saw 中加入已访问的元素 放回 diff 集合的大小(set 相同的元素只存放一次)
要注意 set 中相同的元素只存放一次,所以对于 3 1 4 1 5 的情况,diff 集合中只会保存 1 个元素 1,表示只有一个 (1, 3) 数对。
class Solution {
public:
int findPairs(vector& nums, int k) {
if (k < 0)
return 0;
// 保存访问的元素
std::set saw;
// 保存 k-diff 数对中较小的那个
// 也可以保存较大的,只用来统计数对个数
std::set diff;
for (int i = 0; i < nums.size(); i++) {
// 检查数对中较小的数 1 是否在数组中:3 - 2 = 1
if (saw.find(nums[i] - k) != saw.end())
diff.insert(nums[i] - k); // 插入数对中较小的数 1
// 检查数对中较大的数 3 是否在数组中:1 + 2 = 3
if (saw.find(nums[i] + k) != saw.end())
diff.insert(nums[i]); // 插入数对中较小的数 1
saw.insert(nums[i]);
}
// 因为 set 中不存在重复元素
// 所以不同的元素个数代表不同的 k-diff 数对个数
return diff.size();
}
};
复杂度分析
时间复杂度:O(n),只需要遍历一次数组 空间复杂度:O(n),set 集合空间与数组大小 n 呈线性增长
看完了这篇文章,相信你对"LeetCode如何解决数组中K-diff数对的问题"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
数组
元素
不同
复杂
两个
个数
复杂度
整数
中加
问题
相同
较大
大小
空间
篇文章
绝对值
检查
代表
只有
完了
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
风暴峭壁服务器
修改数据库并设置标识列
票据授权服务器的作用
民政局网络安全讲座
软件开发及建设前景
计算机网络技术群名
许昌软件开发解决方案
西电数据库英文期末试题
数据库的数据模型的是
服务器构建家庭网络管理系统
赛默飞数据库怎么样
TD数据库创建内存表
达梦8数据库转为达梦7
周口服务器机柜报价
惠普打印服务器会传回数据
rust怎么进服务器
课程表数据库的设计
振芯科技与互联网
时代中安网络安全培训
城域网网络技术
联想rs590服务器内存条频率
网络安全桌面演练策划
数据库素材
北京车车网络技术有限公司抽奖
运用网络技术一般按哪些步骤进行
人三服务器升级
达梦数据库锁表
谷歌哪个版本可以连服务器
数据库的角色的定义
网络安全学完可以干什么工作