题目
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。
整数 a 比整数 b 更接近 x 需要满足:
|a - x| < |b - x| 或者
|a - x| == |b - x| 且 a < b
过程
class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
vector<int> a;
int n=arr.size();
int l=0;
int r=n-1;
while(r-l+1>k){
if(abs(arr[l]-x)<=abs(arr[r]-x)){
r--;
}else{
l++;
}
}
for(int i=l;i<=r;i++){
a.push_back(arr[i]);
}
return a;
}
};
我的双指针法。就是两端向中间搜寻K个答案。只要中间有K个解就跳出循环。对于两边的前进过程就是,当前哪边差的绝对值更大,就舍去哪一个,如果两边差的绝对值相同,就舍去右边的。最后将找到的索引位置,插入需要返回的数组中。