题目描述:
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的上界。然后根据距离依次往两边拓展。
class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
int idx = lower_bound(arr.begin(), arr.end(), x) - arr.begin();
int i = idx-1, j = idx;
while (k--)
(i < 0 || (j < arr.size() && abs(arr[i]-x) > abs(arr[j]-x))) ? j++:i--;
return vector<int> (arr.begin()+i+1, arr.begin()+j);
}
};