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 ближайших чисел в отсортированном массиве:
Программа гарантирует, что она никогда не перезапишет лучшее решение, найденное на данный момент, путем введения переменной минимальногоDiff:
Код: Выделить всё
public List findClosestElements(int[] arr, int k, int x) {
int startIndex = 0;
int low = 0;
int high = arr.length - k;
int mid = -1;
int minimumDiff = Integer.MAX_VALUE;
int diff = 0;
while(low arr[mid + k] - x)) {
low = mid + 1;
diff = x - arr[mid];
}else {
high = mid - 1;
diff = arr[mid + k] - x;
}
if(minimumDiff > diff) {
minimumDiff = diff;
startIndex = mid;
}
}
List nearestKElements = new ArrayList();
for(int i=startIndex; i
Подробнее здесь: [url]https://stackoverflow.com/questions/79093332/binary-search-nearest-k-elements[/url]
Мобильная версия