leet532. K-diff Pairs in an Array

题目:

Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.

分析:

  1. 异常判断:k是绝对值,意味着k为非负
  2. 特例:集合为空,k-diff对数量为0
  3. k=0,寻找列表中数量大于1的值,采用了Counter类,使用唯一元素的数量减去列表中唯一的元素数量
  4. k>0,建立与原列表差值为k的列表,计算该列表与原列表交集中元素个数

代码:

from collections import Counter
class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if not nums or k < 0:
            return 0
        if k == 0:
            temp = zip(*(Counter(nums).items()))
            return len(set(nums)) - Counter(temp[1])[1]
        lMinus = map(lambda x:x - k,nums)
        return len(set(lMinus) & set(nums))

思考:

  1. 与之前两元素和为k不同,无需排除k/2的情况
  2. 在讨论区看到了一个思路类似,简洁很多的代码,来自leetcode的lee215,代码如下:
def findPairs(self, nums, k):
        c = collections.Counter(nums)
        return  sum(k > 0 and i + k in c or k == 0 and c[i] > 1 for i in c)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzpwslc

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值