Второй максимум
Вы решили задачу. Теперь можно сравнить подходы.
Храним два наибольших значения прочитанной части.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Один проход без хранения последовательности
Новый лидер сдвигает прежний максимум на второе место; остальные числа могут улучшить только второй максимум. Числа по условию различны.
first = second = 0
while True:
x = int(input())
if x == 0:
break
if x > first:
second, first = first, x
elif x > second:
second = x
print(second)
Время: O(n). Память: O(1) числовых переменных.
Другой способ: Сохранение и обработка списка
Сортировка располагает числа по возрастанию, поэтому предпоследнее — второе по величине.
a = []
while True:
x = int(input())
if x == 0:
break
a.append(x)
print(sorted(a)[-2])
Время: O(n log n). Память: O(n) для сохранённой последовательности.
На что обратить внимание
- Гарантированы хотя бы два различных элемента.
- Прежний максимум нельзя потерять при обновлении first.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.