20170605-leetcode-532-K-diff Pairs in an Array

1.Description

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.

Example 1:

**Input:** [3, 1, 4, 1, 5], k = 2
**Output:** 2
**Explanation:** There are two 2-diff pairs in the array, (1, 3) and (3, 5).
Although we have two 1s in the input, we should only return the number of **unique** pairs.

Example 2:

**Input:**[1, 2, 3, 4, 5], k = 1
**Output:** 4
**Explanation:** There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).

Example 3:

**Input:** [1, 3, 1, 5, 4], k = 0
**Output:** 1
**Explanation:** There is one 0-diff pair in the array, (1, 1).

Note:

  1. The pairs (i, j) and (j, i) count as the same pair.
  2. The length of the array won’t exceed 10,000.
  3. All the integers in the given input belong to the range: [-1e7, 1e7].
    解讀
    給定一個序列,和一個距離k,求解序列中組成的二元組中,有多少個距離(兩個數的差)爲k

2.Solution

  • 如果k小於0的話,返回0
  • 如果k等於0,計算序列中重複出現元素的個數
  • 如果k大於0,判斷元素+k是否還在這個序列中

其中很容易出現超時的現象,下面的一種方式沒有出現超時

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if nums==[]:return 0
        if k==0:
            return sum(v > 1 for v in collections.Counter(nums).values())
        elif k>0:
            return len(set(nums)&set(n+k for n in nums))
        else:
            return 0

或者寫成下面的形式

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        ans = 0
        counter = collections.Counter(nums)
        for num in counter:
            if (k > 0 and num + k in counter) or (k == 0 and counter(num) > 1):
                ans = ans + 1
        #print(ans)
        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章