题目
难度:★★☆☆☆
类型:数组
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.
注意
数对 (i, j) 和数对 (j, i) 被算作同一数对。
数组的长度不超过10,000。
所有输入的整数的范围在 [-1e7, 1e7]。
示例
示例 1:
输入: [3, 1, 4, 1, 5], k = 2
输出: 2
解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个1,但我们只应返回不同的数对的数量。
示例 2:
输入:[1, 2, 3, 4, 5], k = 1
输出: 4
解释: 数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5)。
示例 3:
输入: [1, 3, 1, 5, 4], k = 0
输出: 1
解释: 数组中只有一个 0-diff 数对,(1, 1)。
解答
需要考虑三种情况:
K < 0:由于数字差值的绝对值一定不小于零,这种情况一定不存在满足条件的数对,返回零;
K = 0:此时要求寻找0-diff数对,即相等的数对;
K > 0:遍历数组,寻找两数之差等于K的数对。
这里需要注意的是:
重复数对看做同一个数对,因此我们遍历的数组应该是去重后的数组;
这里K=0和K>0区别对待:
(1)0-diff数对是可以通过查看去重后数组中每个元素在原数组中出现的次数实现;
(2)K-diff数对(K>0)去重后数组中每个元素增加K后是否在原始数组中实现。
class Solution:
def findPairs(self, nums, k):
if k < 0:
return 0
if k == 0:
# 对于数组集合中每一个元素,查看该元素是在数组中是否出现相同元素
return sum([nums.count(num) > 1 for num in set(nums)])
# 对于数组集合中的每一个元素,查看该元素是否存在比它大K的元素
return sum([num+k in nums for num in set(nums)])
如有疑问或建议,欢迎评论区留言~