Бинарный поиск: ближайшие K элементовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Бинарный поиск: ближайшие K элементов

Сообщение Anonymous »

Я пытался решить проблему Leetcode «найти K ближайших K элементов в отсортированном массиве», используя подход двоичного поиска, но не смог понять, почему он не работает.
LeetCode Проблема Ссылка:
текст
Описание проблемы:
дан отсортированный целочисленный массив arr , два целых числа k и x, возвращают k ближайшие целые числа к x в массиве. Результат также следует отсортировать по возрастанию.
Целое число a ближе к x, чем целое число b, если: Пример 1:< /p>
Ввод: arr = [1,2,3,4,5], k = 4, x = 3
Выход: [1,2,3,4]
Попытался написать программу для решения K ближайших чисел в отсортированном массиве:

Код: Выделить всё

public List findClosestElements(int[] arr, int k, int x) {
int startIndex = 0;
int low = 0;
int high = arr.length - k;
int mid = -1;
while(low  arr[mid + k - 1] - x) {
low = mid + 1;
}else {
startIndex = mid;
high = mid - 1;
}
}
List nearestKElements = new ArrayList();
for(int i=startIndex; i diff) {
minimumDiff = diff;
startIndex = mid;
}
}
List nearestKElements = new ArrayList();
for(int i=startIndex; i A[mid + k] - x)
left = mid + 1;
else
right = mid;
}
return Arrays.stream(A, left, left + k).boxed().collect(Collectors.toList());
}
Вопросы:
  • В своей программе я сравниваю arr[ Mid] с последним элементом окна-кандидата (т.е. arr[mid + k -1] ), но в решении для лит-кода arr[mid] сравнивается с arr[mid+ k]. Зачем нам сравнивать с arr[mid + k]?
  • Я знаю, что существуют разные шаблоны для решения программ двоичного поиска. Я использую шаблон «низкий

    Подробнее здесь: https://stackoverflow.com/questions/790 ... k-elements
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»