邓心一 před 4 roky
rodič
revize
c8e2e2942b
1 změnil soubory, kde provedl 49 přidání a 0 odebrání
  1. 49 0
      leetcode/hard/719.cc

+ 49 - 0
leetcode/hard/719.cc

@@ -0,0 +1,49 @@
+#include <algorithm>
+#include <vector>
+
+#include <iostream>
+
+using std::sort;
+using std::vector;
+
+using std::cout; using std::endl;
+
+class Solution {
+public:
+    int smallestDistancePair(vector<int>& nums, int k) {
+        int len = nums.size();
+        sort(nums.begin(), nums.end());
+        int beg = 0, end = nums.back() - nums.front();
+        while (beg < end) {
+            int mid = beg + (end - beg) / 2;
+            if (k <= pairs_less_than_or_equal(nums, mid)) {
+                end = mid;
+            } else {
+                beg = mid + 1;
+            }
+        }
+        return beg;
+    }
+private:
+    int pairs_less_than_or_equal(vector<int>& nums, int d) {
+        int len = nums.size();
+        int cnt = 0;
+        for (int i = 1, j = 0; i < len; i++) {
+            while (j < i && d < nums[i] - nums[j])
+                j++;
+            cnt += i - j;
+        }
+        return cnt;
+    }
+};
+
+int main() {
+    Solution* sol = new Solution;
+
+    vector<int> nums{1, 3, 1};
+    int k = 1;
+
+    cout << sol->smallestDistancePair(nums, k) << endl;
+
+    return 0;
+}