Leetcode - Find K Closest Elements
https://leetcode.com/problems/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
func findClosestElements(arr []int, k int, x int) []int { if k == len(arr) { return arr } left := 0 right := len(arr)-1 var mid int for left <= right { mid = left + (right - left)/2 if arr[mid] == x { right = mid break } if arr[mid] > x { right = mid - 1 } else { left = mid + 1 } } left = right right++ for k > 0 { if right >= len(arr) || (left >= 0 && x - arr[left] <= arr[right] - x) { left-- } else { right++ } k-- } return arr[left+1:right] }