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.
Solution:
class Solution {
public int smallestDistancePair(int[] nums, int k) {
Arrays.sort(nums);
int left=0;
int right = nums[nums.length-1]-nums[0];
while(left<right)
{
int mid=(left+right)/2;
if(issmallpairs(nums,k,mid))
right=mid;
else
left=mid+1;
}
return left;
}
private boolean issmallpairs(int[] nums,int k,int mid)
{
int count=0, left=0;
for(int right=1;right<nums.length;right++)
{
while(nums[right]-nums[left]>mid) left++;
count+=right-left;
}
return (count>=k);
}
}
Comments