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