ID | Title | Difficulty | |
---|---|---|---|
Loading... |
658. Find K Closest Elements
Medium
LeetCode
Array, Two Pointers, Binary Search, Sliding Window, Sorting, Heap (Priority Queue)
Problem
-
Given a sorted integer array
arr
, two integersk
andx
, return thek
closest integers tox
in the array. The result should also be sorted in ascending order.An integer
a
is closer tox
than an integerb
if:|a - x| < |b - x|
, or|a - x| == |b - x|
anda < b
Example 1:
Input: arr = [1,2,3,4,5], k = 4, x = 3 Output: [1,2,3,4]
Example 2:
Input: arr = [1,2,3,4,5], k = 4, x = -1 Output: [1,2,3,4]
Constraints:
1 <= k <= arr.length
1 <= arr.length <= 104
arr
is sorted in ascending order.-104 <= arr[i], x <= 104
Code
class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
int left = 0;
int right = arr.length - k;
while (left < right) {
int mid = (left + right) / 2;
if (x < arr[mid]) {
right = mid;
} else if (x > arr[mid + k]) {
left = mid + 1;
} else {
if (x - arr[mid] <= arr[mid + k] - x) {
right = mid;
} else {
left = mid + 1;
}
}
}
List<Integer> res = new ArrayList<>(k);
for (int i = left; i < left + k; i++) {
res.add(arr[i]);
}
return res;
}
}
按 <- 键看上一题!
657. Robot Return to Origin
按 -> 键看下一题!
659. Split Array into Consecutive Subsequences