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
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
int mid, left=0, right=arr.size()-k;
while(left < right) {
mid = (right-left) / 2 + left;
if(x - arr[mid] > arr[mid+k] - x)
left = mid+1;
else
right = mid;
}
return vector<int>(arr.begin() + left, arr.begin() + left + k);
}
网上看到的奇妙的二分的算法 感觉自己现在的脑子是想不出来这样的算法的 就是只能想到笨笨的前后遍历 看到这个解法之后还思考了半天消化了半天
加油!!!冲啊!!!学习!!!