class Solution {
public:
//返回差值比mid小的个数
int get(vector<int>& nums, int mid) {
int res = 0;
for(int i = 0, j = 0; i < nums.size(); i ++) {
while(nums[i] - nums[j] > mid) j ++;
res += i - j;//i-j表示有(i-j)个元素到nums[i]的距离小于等于mid距离对数量
}
return res;
}
int smallestDistancePair(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int l = 0, r = 1e6;
while(l < r) {
int mid = (l + r) >> 1;
if(get(nums, mid) >= k) r = mid;//如果差值比mid小的个数比k大,则说明mid比较大,在mid的左边寻找即可
else l = mid + 1;
}
return r;
}
};