719.cc 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <algorithm>
  2. #include <vector>
  3. #include <iostream>
  4. using std::sort;
  5. using std::vector;
  6. using std::cout; using std::endl;
  7. class Solution {
  8. public:
  9. int smallestDistancePair(vector<int>& nums, int k) {
  10. int len = nums.size();
  11. sort(nums.begin(), nums.end());
  12. int beg = 0, end = nums.back() - nums.front();
  13. while (beg < end) {
  14. int mid = beg + (end - beg) / 2;
  15. if (k <= pairs_less_than_or_equal(nums, mid)) {
  16. end = mid;
  17. } else {
  18. beg = mid + 1;
  19. }
  20. }
  21. return beg;
  22. }
  23. private:
  24. int pairs_less_than_or_equal(vector<int>& nums, int d) {
  25. int len = nums.size();
  26. int cnt = 0;
  27. for (int i = 1, j = 0; i < len; i++) {
  28. while (j < i && d < nums[i] - nums[j])
  29. j++;
  30. cnt += i - j;
  31. }
  32. return cnt;
  33. }
  34. };
  35. int main() {
  36. Solution* sol = new Solution;
  37. vector<int> nums{1, 3, 1};
  38. int k = 1;
  39. cout << sol->smallestDistancePair(nums, k) << endl;
  40. return 0;
  41. }