Второй максимум

тема: Основы · уровень: продвинутый

Условие

Второй максимум

Дан массив из \(n\) чисел. Найдите второе по величине различное значение. Гарантируется, что различных значений хотя бы два.

Входные данные

В первой строке \(n\) (\(2 \le n \le 50\)). Во второй строке \(n\) целых чисел.

Выходные данные

Одно число — второе по величине среди различных значений.

Пример

Вход:

5
1 3 3 2 5

Выход:

3

Различные значения: 1, 2, 3, 5. Максимум — 5, второй — 3.

Как решать — идея подхода

Приём: Один проход: два лучших значения

Ключевое наблюдение: «второй максимум» считается среди различных значений, поэтому повторы максимума не должны «съедать» ответ. Достаточно в одном проходе поддерживать два разных числа: mx1 (самое большое) и mx2 (второе по величине, но не равное mx1).

Почему работает: при просмотре очередного x есть всего три ситуации — он больше текущего максимума, он между первым и вторым, или он не улучшает ответ. Мы обновляем только эти две переменные, и после конца прохода mx2 уже является вторым по величине среди всех просмотренных значений.

План:

Мини-сниппет логики обновления:

Сложность: O(n) по времени и O(1) по памяти.

Частая ошибка: проверять x != mx1 вместо строгого mx1 > x во второй ветке — это может случайно принять число больше mx1 (если порядок условий неверный) или неправильно обработать повторы.

Решить задачу с автопроверкой на Python →

Куда дальше