LeetCode Проблема Ссылка:
текст
Описание проблемы:
дан отсортированный целочисленный массив arr , два целых числа k и x, возвращают k ближайшие целые числа к x в массиве. Результат также следует отсортировать по возрастанию.
Целое число a ближе к x, чем целое число b, если:
- или
Код: Выделить всё
|a - x| < |b - x| - и < b
Код: Выделить всё
|a - x| == |b - x|
Ввод: 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
Мобильная версия