精華區beta Marginalman 關於我們 聯絡資訊
※ 引述《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