Я хочу получить ближайший меньший номер из отсортированного списка, когда запрашиваемого номера нет в списке. Например: список {10,14,55,97} и запрошенный номер
12, затем я хочу вернуть 10. Но код ниже возвращает 14. Этот код ищет в обоих направлениях в списке. Я хочу искать только в нижней части списка.
Я попробовал следующий код:
public static int getClosestInteger(final List<Integer> listOfIntegers, final int requestedNumber) {
int low = 0;
int high = listOfIntegers.size() - 1;
if (high < 0) {
throw new IllegalArgumentException("The list cannot be empty");
}
while (low < high) {
final int mid = (low + high) / 2;
assert (mid < high);
final int digit1 = Math.abs(listOfIntegers.get(mid) - requestedNumber);
final int digit2 = Math.abs(listOfIntegers.get(mid + 1) - requestedNumber);
if (digit2 <= digit1) {
low = mid + 1;
} else {
high = mid;
}
}
return listOfIntegers.get(high);
}
Есть предложения, что поменять?