https://leetcode.com/problems/find-k-closest-elements/
Given a sorted array, two integers
k
andx
, find thek
closest elements tox
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
有序数组,二分:
class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
int lo = 0, hi = arr.size()-k;
int mid;
while(lo < hi){
mid = (lo+hi)/2;
if(abs(x-arr[mid]) > abs(x-arr[mid+k])) lo = mid+1;
else hi = mid;
}
return vector<int>(arr.begin()+lo, arr.begin()+lo+k);
}
};