[LeetCode] Find K Closest Elements
Given a sorted array, two integers k
and x
, find the k
closest elements to x
in the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are always preferred.
Example 1:
Input: [1,2,3,4,5], k=4, x=3 Output: [1,2,3,4]
Example 2:
Input: [1,2,3,4,5], k=4, x=-1 Output: [1,2,3,4]
Note:
- The value k is positive and will always be smaller than the length of the sorted array.
- Length of the given array is positive and will not exceed 104
- Absolute value of elements in the array and x will not exceed 104
题目:题目要求找出排序数组中距离x的k个数,如果x左右两边的值距离相同,则保留x左边的数字。
思路:通过题意,也就是求一个长度为k的子数组,要求数组中的值都距离x最近,则可以从数组两边开始删除,因为距离最远的元素肯定出现在首尾。比较数组的首尾元素与x的距离,删除距离较大的那个元素。这样当数组中元素剩余k个时,就是题目要求的结果数组。代码如下
class Solution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x) { vector<int> res = arr; while (res.size() > k) { if (x - res.front() <= res.back() - x) res.pop_back(); else res.erase(res.begin()); } return res; } };