Leetcode - Find K-th Smallest Pair Distance
https://leetcode.com/problems/find-k-th-smallest-pair-distance/
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pair (A, B) is defined as the absolute difference between A and B.
Example 1:
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.
Note:
-
2 <= len(nums) <= 10000
. -
0 <= nums[i] < 1000000
. -
1 <= k <= len(nums) * (len(nums) - 1) / 2
.
It's not a quick select or heap issue.
func smallestDistancePair(nums []int, k int) int { sort.Ints(nums) left := 0 right := nums[len(nums)-1] - nums[0] var mid int for count := 0; left < right; count = 0 { mid = left + (right - left)/2 for i, j := 0, 0; i < len(nums); i++ { for j < len(nums) && nums[j] <= nums[i] + mid { j++ } count += j - i - 1 } if count < k { left = mid + 1 } else { right = mid } } return left }