Я пытаюсь решить следующую проблему кода leetcode:
Учитывая отсортированный массив, два целых числа k и x, найдите k ближайших элементов к x в массиве. Результат также должен быть отсортирован в порядке возрастания. Если есть ie, меньшие элементы всегда предпочтительнее.
Пример 1: Ввод: [1,2,3,4,5], k = 4, x = 3
Выход: [1,2,3,4]
Пример 2: Вход: [1,2,3,4,5], k = 4, x = -1
Выход : [1,2,3,4]
Мое неверное решение на данный момент следующее:
class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
PriorityQueue<Integer> pq = new PriorityQueue<>(arr.length, (a,b) -> a == b ? a - b : Math.abs(a-x) - Math.abs(b-x));
for(int i=0; i<arr.length; i++) {
pq.add(arr[i]);
}
ArrayList ints = new ArrayList<>();
for(int i=0;i<k;i++) {
ints.add(pq.poll());
}
return ints;
}
}
Проблема в компараторе, который я передаю конструктору. Идея состоит в том, что я хочу, чтобы мой компаратор сортировал целые числа относительно минимального расстояния между любым целым числом i и входными данными x
, а затем опрашивал k
элементов из очереди. Как я могу реализовать функцию сравнения, которая сортирует элементы таким образом?