Сложность: easy
Дан отсортированный массив целых чисел arr, два целых числа k и x. Верните k ближайших к x целых чисел в массиве. Результат также должен быть отсортирован в порядке возрастания.
Целое число a ближе к x, чем целое число b, если:
|a - x| < |b - x|, или
|a - x| == |b - x| и a < b.
Пример:
Input: arr = [1,2,3,4,5], k = 4, x = 3
Output: [1,2,3,4]
👨💻 Алгоритм:
1⃣Бинарный поиск:
Найдите положение числа x или ближайшего к нему числа в массиве arr с помощью бинарного поиска.
2⃣Два указателя:
Используйте два указателя, чтобы расширять окно, которое содержит k ближайших к x элементов. Начните с ближайших элементов и расширяйте окно, сравнивая элементы слева и справа от текущего окна.
3⃣Сортировка:
Отсортируйте итоговый список, если это необходимо (в данном случае это не нужно, так как массив уже отсортирован).
😎 Решение:
class Solution {
function findClosestElements($arr, $k, $x) {
$left = 0;
$right = count($arr) - $k;
while ($left < $right) {
$mid = (int)(($left + $right) / 2);
if ($x - $arr[$mid] > $arr[$mid + $k] - $x) {
$left = $mid + 1;
} else {
$right = $mid;
}
}
return array_slice($arr, $left, $k);
}
}Ставь 👍 и забирай 📚 Базу знаний