leetcode 658找到k个最接近的元素
Posted joelwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 658找到k个最接近的元素相关的知识,希望对你有一定的参考价值。
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个最接近的元素的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 658 找到K个最接近的元素[二分法] HERODING的LeetCode之路
LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积
LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积