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
.
class Solution {
public:
int smallestDistancePair(vector<int>& nums, int k)
{
int len = nums.size();
sort(nums.begin(),nums.end());
int left = 0;
int right = nums[len-1]-nums[0];
int mid=0;
while(left<right)
{
mid = left + (right-left)/2;
int lowl=0;
int count = 0;
for(int upl=0;upl<len;upl++)
{
while(nums[upl]-nums[lowl]>mid) lowl++;
count += upl - lowl;
}
if(count<k) left = mid+1;
else right = mid;
}
return left;
}
};