The distance of a pair of integers a
and b
is defined as the absolute difference between a
and b
.
Given an integer array nums
and an integer k
, return the kth
smallest distance among all the pairs nums[i]
and nums[j]
where 0 <= i < j < nums.length
.
Input: nums = [1,3,1], k = 1 Output: 0 Explanation: Here are all the pairs: (1,3) -> 2 (1,1) -> 0 (3,1) -> 2 Then the 1st smallest distance pair is (1,1), and its distance is 0.
Input: nums = [1,1,1], k = 2 Output: 0
Input: nums = [1,6,1], k = 3 Output: 5
n == nums.length
2 <= n <= 104
0 <= nums[i] <= 106
1 <= k <= n * (n - 1) / 2
class Solution:
def smallestDistancePair(self, nums: List[int], k: int) -> int:
nums.sort()
lo = 0
hi = nums[-1] - nums[0]
while lo < hi:
mid = (lo + hi) // 2
count = 0
for i in range(len(nums)):
j = bisect.bisect(nums, nums[i] + mid, lo=i + 1)
count += j - i - 1
if count < k:
lo = mid + 1
else:
hi = mid
return hi