LeetCode532. 数组中的K-diff数对(Python)

给定一个整数数组和一个整数 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)。

注意:

  1. 数对 (i, j) 和数对 (j, i) 被算作同一数对。
  2. 数组的长度不超过10,000。
  3. 所有输入的整数的范围在 [-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

扫描二维码关注公众号,回复: 3045338 查看本文章

猜你喜欢

转载自blog.csdn.net/Manson_Wang/article/details/82115515
今日推荐