Find K-th Smallest Pair Distance
HardArrayTwo PointersBinary SearchSorting
Solution
export function smallestDistancePair(nums: number[], k: number): number {
nums.sort((a, b) => a - b);
const n = nums.length;
let [left, right] = [0, nums[n - 1] - nums[0]];
while (left < right) {
const mid = left + Math.floor((right - left) / 2);
if (countPair(nums, mid) < k) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
function countPair(nums: number[], distance: number) {
const n = nums.length;
let count = 0;
let [i, j] = [0, 0];
while (i < n || j < n) {
while (j < n && nums[j] - nums[i] <= distance) {
j += 1;
}
count += j - i - 1;
i += 1;
}
return count;
}
Complexity
- Time:
O(NlogN)
- Space:
O(1)