※ 引述《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;
}
};
```