【Leetcode_总结】532. 数组中的K-diff数对 - python

链接:https://leetcode-cn.com/problems/k-diff-pairs-in-an-array/description/

Q:

给定一个整数数组和一个整数 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,但我们只应返回不同的数对的数量。

思路:k小于0 返回0; 等于0 返回数组中重复的值数量 ;大于0计算能够使得相减等于k的数量 第一次使用list超时 换为字典后通过 但是效率很低

超时: 

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if k == 0:
            res = 0
            temp = list(set(nums))
            for t in temp:
                if nums.count(t) > 1:
                    res += 1
            return res
        if k > 0:
            res = 0
            temp = []
            for i in range(len(nums)):
                if nums[i] + k in nums and nums[i] not in temp :
                    res += 1
                    temp.append(nums[i])
            return res
        if k < 0:
            res = 0
            return res

通过: 

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if k < 0:
            return 0
        dict4nums = {}
        for i in range(len(nums)):
            if nums[i] in dict4nums:
                dict4nums[nums[i]] += 1
            else:
                dict4nums[nums[i]] = 1
        if k == 0:
            res = 0
            for value in dict4nums:
                if dict4nums[value] > 1:
                    res += 1
            return res
        if k > 0:
            res = 0
            temp = []
            for i in range(len(nums)):
                if nums[i] + k in dict4nums and nums[i] not in temp:
                    res += 1
                    temp.append(nums[i])
            return res

【Leetcode_总结】532. 数组中的K-diff数对 - python

稍微改一下:

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if k < 0:
            return 0
        dict4nums = {}
        for i in range(len(nums)):
            if nums[i] in dict4nums:
                dict4nums[nums[i]] += 1
            else:
                dict4nums[nums[i]] = 1
        if k == 0:
            res = 0
            for value in dict4nums:
                if dict4nums[value] > 1:
                    res += 1
            return res
        if k > 0:
            res = 0
            temp = list(set(nums))
            for i in range(len(temp)):
                if temp[i] + k in dict4nums:
                    res += 1
            return res

 

【Leetcode_总结】532. 数组中的K-diff数对 - python