作者involution ( )
看板Marginalman
標題Re: [閒聊] 每日leetcode
時間Wed Aug 14 10:07:55 2024
※ 引述《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;
}
};
```
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.77.61.242 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1723601278.A.EE0.html
→ Rushia: 别卷了 08/14 10:16
推 pandix: 大師 08/14 10:21
→ DJYOMIYAHINA: 我跪下來了 08/14 10:22
推 sustainer123: 大師 08/14 10:24
→ argorok: 大師 08/14 10:32
推 oin1104: 大師 08/14 10:35
推 dont: 大師 08/14 10:55