Серебряный приз: второй по величине разный счёт

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

Условие

На турнире по игре «Космо-раннер» у каждого участника есть свой счёт.

Золотой приз получает участник с самым большим счётом. А серебряный приз — тот, чей счёт второй по величине среди РАЗЛИЧНЫХ счётов.

Например, если счёты такие: 10, 10, 8, 7, то самый большой счёт — 10, а второй по величине разный — 8.

Твоя задача — помочь судье и вывести значение серебряного счёта.

Гарантируется, что различных счётов хотя бы два.

Формат ввода

Первая строка: целое число n — количество участников. Вторая строка: n целых чисел — счёты участников.

Формат вывода

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

Ограничения

Пример

Ввод:

5
10 7 10 8 8

Вывод:

8

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

Приём: Два максимума за один проход

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

Подход: пройти по массиву один раз и поддерживать два значения:

Почему работает: в любой момент времени max1 и max2 хранят два лучших различных значения из уже просмотренных элементов. При встрече нового числа мы либо обновляем лидера, либо улучшаем второе место.

План:

Мини-сниппет условия для второго места: if x != max1 and x > max2: max2 = x (но не забудь, что обновление max1 отдельным случаем).

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

Частая ошибка: считать «вторым» просто второй элемент после сортировки или обновлять max2, когда x == max1 (это ломает случай с несколькими максимальными значениями).

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

Куда дальше