首页 > 其他 > 详细

【二分查找】658. 找到 K 个最接近的元素

时间:2020-05-05 17:11:20      阅读:139      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

解答:

方法一:

技术分享图片

 

 

 1 class Solution {
 2 public:
 3     vector<int> findClosestElements(vector<int>& arr, int k, int x) 
 4     {
 5         int size = arr.size();
 6 
 7         int left = 0;
 8         int right = size - 1;
 9 
10         int removeNums = size - k;
11 
12         while (removeNums > 0) 
13         {
14             if (x - arr[left] <= arr[right] - x) 
15             {
16                 right--;
17             } 
18             else 
19             {
20                 left++;
21             }
22             removeNums--;
23         }
24 
25         vector<int> res;
26         for (int i = left; i < left + k; i++) 
27         {
28             res.push_back(arr[i]);
29         }
30         return res;
31     }
32 };

 

方法二:二分查找

技术分享图片

 

 

 1 class Solution {
 2 public:
 3     vector<int> findClosestElements(vector<int>& arr, int k, int x) 
 4     {
 5         int size = arr.size();
 6 
 7         int left = 0;
 8         int right = size - k;
 9 
10         while (left < right) 
11         {
12             int mid = left + (right - left) / 2;
13            
14             // 尝试从长度为 k + 1 的连续子区间删除一个元素
15             // 从而定位左区间端点的边界值
16             if (x - arr[mid] > arr[mid + k] - x) 
17             {
18                 left = mid + 1;
19             } 
20             else 
21             {
22                 right = mid;
23             }
24         }
25 
26         vector<int> res;
27         for (int i = left; i < left + k; i++) 
28         {
29             res.push_back(arr[i]);
30         }
31         return res;
32     }
33 };

 

【二分查找】658. 找到 K 个最接近的元素

原文:https://www.cnblogs.com/ocpc/p/12830474.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!