658. Find K Closest Elements
Description
Given a sorted integer array arr
, two integers k
and x
, return the k
closest integers to x
in the array. The result should also be sorted in ascending order.
An integer a
is closer to x
than an integer b
if:
|a - x| < |b - x|
, or|a - x| == |b - x|
anda < b
Constraints
1 <= k <= arr.length
1 <= arr.length <= 104
arr
is sorted in ascending order.-104 <= arr[i], x <= 104
Approach
Links
Binarysearch
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: arr = [1, 2, 3, 4, 5], k = 4, x = 3
Output: [1, 2, 3, 4]
Solutions
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
if(arr == null || arr.length < k) {
return List.of();
}
int low = 0, high = arr.length-k;
while(low < high) {
int mid = low + (high-low)/2;
if(x-arr[mid] > arr[mid+k]-x) {
low = mid + 1;
} else {
high = mid;
}
}
List<Integer> result = new ArrayList();
for(int i = low; i < low+k; i++) {
result.add(arr[i]);
}
return result;
}
}
Follow up
Last updated
Was this helpful?