658. Find K Closest Elements

Given a sorted array, two integerskandx, find thekclosest elements toxin 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:

  1. The value k is positive and will always be smaller than the length of the sorted array.

  2. Length of the given array is positive and will not exceed 10^4

  3. Absolute value of elements in the array and x will not exceed 10^4

Thoughts:

  1. Binary -searching the first index i that arr[i] is closer or equally close to arr[i+k] (Original Post)

  2. Binary-searching forxand then expanding to the left and to the right: The idea is to find the first number which is equal to or greater thanxinarr. Then, we determine the indices of the start and the end of a subarray inarr, where the subarray is our result. The time complexity is O(logn + k)

    .

Code: Binary -searching for the first index i T: O(log(n-k))

Python: T: O(log(n-k))

Code 2: Reference T: O(log(n)+k)

Last updated

Was this helpful?