Bootstrap

658.找到K个最接近的元素(双指针)

目录

题目

给定一个 排序好 的数组 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个解就跳出循环。对于两边的前进过程就是,当前哪边差的绝对值更大,就舍去哪一个,如果两边差的绝对值相同,就舍去右边的。最后将找到的索引位置,插入需要返回的数组中。

;