※ 引述《Rushia (早瀬ユウカの体操服 )》之铭言:
: https://leetcode.com/problems/find-k-th-smallest-pair-distance/description
: 719. Find K-th Smallest Pair Distance
首先观察到 答案是与位置无关的
也就是任意两个元素互换之后结果还是一样的
所以可以假设是排序过的了
一旦假设是排序过的 就能发现可以用 binary search + sliding window 做
找出最小的 r 使得差距 <=r 的 pair 数 >= k 就是答案了
```
class Solution {
public:
int smallestDistancePair(vector<int>& nums, int k) {
int n = nums.size();
sort(nums.begin(), nums.end());
auto pred = [&](int r) {
// #[(i,j)<=r] >= k
int start = 0, total = 0;
for (int end = 0; end < n; end++) {
while (start < end && nums[end] - nums[start] > r)
start += 1;
total += end - start;
}
return total >= k;
};
int low = 0, high = 1e7;
while (low < high) {
int mid = low + (high - low) / 2;
if (pred(mid)) high = mid;
else low = mid + 1;
}
return low;
}
};
```