719. Find K Th Smallest Pair Distance¶
Difficulty: Hard
LeetCode Problem View on GitHub
719. Find K-th Smallest Pair Distance
Hard
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.
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.length2 <= n <= 1040 <= nums[i] <= 1061 <= k <= n * (n - 1) / 2
Solution¶
class Solution {
public int smallestDistancePair(int[] nums, int k) {
int n = nums.length;
Arrays.sort(nums);
int low = 0, high = nums[n - 1] - nums[0], ans = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (count(mid, nums) < k)
low = mid + 1;
else high = mid - 1;
}
return low;
}
private int count(int target, int arr[]) {
int n = arr.length;
int count = 0, j = 0;
for (int i = 0; i < n; i++) {
while (j < n && arr[j] - arr[i] <= target)
j++;
count += j - i - 1;
}
return count;
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here