Двоичный поиск выполняется по отсортированному массиву. Если у вас уже есть отсортированный массив, зачем вам вообще что-то делать?
Вторым по последнему числу в массиве (отсортированном в порядке возрастания) будет второе по величине число. (O (1))
Еслимассив содержит дубликаты:
Например, {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ...}
Сложность по времени будет O (log n) , где n - количество элементов в массиве.
Наименьшее число - это однос индексом 0 (назовите его x), теперь вы можете использовать бинарный поиск, чтобы найти границы массива, внутри которых все элементы равны x. Непосредственный сосед за этими границами будет вторым по величине числом в массиве.
Если вы используете C ++, вы можете использовать этот метод для получения upper_bound.