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
}
评论 (0)