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 thekthsmallest distance among all the pairsnums[i]andnums[j]where0 <= i < j < nums.length.
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.
Example 2:
Input: nums = [1,1,1], k = 2
Output: 0
Example 3:
Input: nums = [1,6,1], k = 3
Output: 5
Constraints:
n == nums.length
2 <= n <= 104
0 <= nums[i] <= 106
1 <= k <= n * (n - 1) / 2
Solutions
Solution 1
Thinking
We want the \(k\)-th smallest pairwise distance. \(n\le 10^4\) forbids listing all \(O(n^2)\) pairs. Distances lie in \([0,\max-\min]\) and the count of pairs \(\le d\) is monotone in \(d\).
Binary-search \(d\) and count pairs with distance \(\le d\). After sorting, each right value \(b\) has a leftmost partner \(b-d\); a lower-bound search counts them in \(O(n\log n)\).
The smallest \(d\) whose count is at least \(k\) is the answer, searched in \([0, nums[-1]-nums[0]]\).