码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 658找到k个最接近的元素

时间:2019-06-10 13:58:47      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:指针   for   span   查找   div   code   mamicode   amp   back   

技术图片

 

class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        //查找,二分法找到那个数的lowerbound然后左右指针比较;O(logn+2k)
        vector<int>::iterator p=lower_bound(arr.begin(),arr.end(),x);
        if(p!=arr.begin() && *p != x) p--;
        vector<int> res;
        int len=arr.size();
        int l=p-arr.begin(),r=p-arr.begin();
        //cout<<l<<","<<r<<endl;
        while(r-l<k-1){
            if(l==0){
                r++;continue;
            }
            if(r==len-1){
                l--;continue;
            }
            if(arr[r+1]-x>=x-arr[l-1])
                l--;
            else
                r++;
        }
        for(int i=l;i<=r;i++)
            res.push_back(arr[i]);
        return res;
    }
};

 

leetcode 658找到k个最接近的元素

标签:指针   for   span   查找   div   code   mamicode   amp   back   

原文地址:https://www.cnblogs.com/joelwang/p/10997003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!