给定一个整数数组和一个整数 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,但我们只应返回不同的数对的数量。
示例 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)。
注意:
- 数对 (i, j) 和数对 (j, i) 被算作同一数对。
- 数组的长度不超过10,000。
- 所有输入的整数的范围在 [-1e7, 1e7]。
代码思路:
为了防止重复数对的出现,可以考虑使用集合,但是存在k等于0的情况,所以分成两种情况考虑。
当k = 0 时,可以考虑使用字典存储存储,键为元素,值为元素个数。数对的数量,就是值>1 的键的个数。
当k > 0 时,现将列表集合化,考虑nums[i] + k 是否在集合中,若在count += 1
代码实现:
class Solution(object):
def countKdiff(self, nums, target):
#数对个数
res = 0
#分两种情况
#target == 0
if target ==0:
#用一个字典,存储每个元素的个数
dict1 = {}
for i in range(len(nums)):
#创建以元素为键的键-值对
if i not in dict1.keys():
dict1[i] = 0
#值+1
dict1[i] += 1
#print(dict1)
#计算数对个数
for j in dict1.keys():
if dict1[j] > 1:
res += 1
return res
#target > 0
elif target > 0:
#防止出现重复数对,使用集合,剔除重复数字
nums = set(nums)
for i in nums:
#判断是否存在
if (i + target) in nums:
res += 1
return res