Переберите ваш список и найдите следующие два значения:
- Наибольшее число, которое меньше вашего целевого числа.
- Наименьшее число, которое больше целевого числа.
В псевдокоде:
lowerlimit = Unknown
upperlimit = Unknown
for each n in list:
if (n <= target) and (lowerlimit is Unknown or n > lowerlimit):
lowerlimit = n
if (n >= target) and (upperlimit is Unknown or n < upperlimit):
upperlimit = n
Тогда lowerlimit
и upperlimit
- ваш ответ. Этот алгоритм требует O (n) времени и O (1) дополнительного пространства.
Если вы собираетесь протестировать один и тот же список с множеством разных целевых чисел, то может иметь смысл сначала отсортировать список, требующий времени O (n log (n)), но затем вы можете найти пределы всего за O (log (n)) время с использованием бинарного поиска.