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
UPDATE (2017/9/19):
The arr parameter had been changed to an array of integers (instead of a list of integers). Please reload the code definition to get the latest changes.
The arr parameter had been changed to an array of integers (instead of a list of integers). Please reload the code definition to get the latest changes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Solution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x) { int left = 0; int right = arr.size()-k; while(left<right){ int mid = left+(right-left)/2; if(x-arr[mid]>arr[mid+k]-x){ left = mid+1; }else{ right = mid; } } auto S = arr.begin()+left; auto E = arr.begin()+left+k; return vector<int>(S,E); } }; |
No comments:
Post a Comment