LeetCode每日一题——532. 数组中的 k-diff 数对

简介: 给定一个整数数组和一个整数 k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。

题目

给定一个整数数组和一个整数 k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。

这里将 k-diff 数对定义为一个整数对 (nums[i], nums[j]),并满足下述全部条件:

0 <= i < j < nums.length

|nums[i] - nums[j]| == k

注意,|val| 表示 val 的绝对值。

示例

示例 1:

输入:nums = [3, 1, 4, 1, 5], k = 2

输出:2

解释:数组中有两个 2-diff 数对, (1, 3) 和(3, 5)。 尽管数组中有两个1,但我们只应返回不同的数对的数量。

示例 2:

输入:nums = [1, 2, 3, 4, 5], k = 1

输出:4

解释:数组中有四个 1-diff 数对, (1, 2), (2,3), (3, 4) 和 (4, 5)。

示例 3:

输入:nums = [1, 3, 1, 5, 4], k = 0

输出:1

解释:数组中只有一个 0-diff 数对,(1, 1)。

提示:

1 <= nums.length <= 104

-107 <= nums[i] <= 107

0 <= k <= 107

思路

需要注意的是, 本题中需要解决重复问题,即类似(1,3),(3,1)这样的例子,虽然差的绝对值相等,但是二者是属于同一种情况的,而避免重复的最简便方法无疑就是哈希表或者集合set了。遍历一次数组,记录已访问的数和已发现的k-diff中的较大值或者较小值(这里记录的是较大值),最后返回第二个集合的长度即为答案。

题解

    def findPairs(self, nums: List[int], k: int) -> int:
        if k<0:
            return 0
        x = set()
        y = set()
        for i in nums:
          # 记录已发现的k-diff中的较大值,注意有两种情况
            if i+k in saw:
                y.add(i+k)
            if i-k in saw:
                y.add(i)
            # 记录已访问的数
            x.add(i)
        return len(y)
目录
相关文章
|
1月前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
10 2
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
8 0
|
5天前
leetcode代码记录(两个数组的交集
leetcode代码记录(两个数组的交集
8 1
|
5天前
leetcode代码记录(最大子数组和
leetcode代码记录(最大子数组和
9 2
|
8天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
19 0
|
13天前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
|
28天前
【力扣】238. 除自身以外数组的乘积
【力扣】238. 除自身以外数组的乘积
|
28天前
|
C++
【力扣】2562. 找出数组的串联值
【力扣】2562. 找出数组的串联值
|
1月前
|
算法 C++ 索引
【力扣经典面试题】238. 除自身以外数组的乘积
【力扣经典面试题】238. 除自身以外数组的乘积