leetcode719:找出第K小的距离对
给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。
输入:
nums = [1,3,1]
k = 1
输出:0
解释:
所有数对如下:
(1,3) -> 2
(1,1) -> 0
(3,1) -> 2
因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。
def smallestDistancePair( nums, k ) :
def possible(guess):
count = left = 0
for right,value in enumerate(nums):
while value - nums[left] > guess:
left+=1
count += right - left
return count>=k
nums.sort()
l = 0
r = nums[-1]-nums[0]
while l < r:
mid = (l+r)>>1
if possible(mid):
r = mid
else:
l = mid + 1
return l