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:
- The pairs (i, j) and (j, i) count as the same pair.
- The length of the array won’t exceed 10,000.
- 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