AC-Code
class Solution {
public:
int smallestDistancePair(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
auto check = [&](int mid) -> bool { // 是否有至少k组,差值<=mid
int cnt = 0, j = 1;
for(int i = 0; i < nums.size(); ++i) {
while(j < nums.size() && nums[j] - nums[i] <= mid) ++j;
cnt += j - i - 1;
}
return cnt >= k;
};
int l = 0, r = nums[nums.size() - 1] - nums[0];
while(l < r) {
int mid = (l + r) >> 1;
if(check(mid)) {
r = mid;
}
else {
l = mid + 1;
}
}
return l;
}
};