找出第 k 小的距离对
题目
思路
二分思想。
代码
class Solution {
public:
int smallestDistancePair(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int l=0,r=nums.back()-nums.front(),len=nums.size();
while(l<r)
{
int mid=l+(r-l)/2;
int num=0,mi=0;
for(int i=0;i<len;i++)
{
while(mi<len&&nums[i]-nums[mi]>mid) mi++;
num+=i-mi;
}
if(num<k) l=mid+1;
else r=mid;
}
return l;
}
};