Функция, возвращающая второе по величине значение в массиве

Уточните, нужен второй различный максимум или второй элемент после сортировки с повторами. Для второго различного значения достаточно одного прохода с двумя текущими максимумами.

Короткий ответ

Что ответить на собеседовании

Уточните, нужен второй различный максимум или второй элемент после сортировки с повторами. Для второго различного значения достаточно одного прохода с двумя текущими максимумами.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, которая принимает список чисел и возвращает элемент, являющийся вторым по величине в этом списке.

def second_max(nums):
    # ваш код здесь
    pass

Ответ

Уточните, нужен второй различный максимум или второй элемент после сортировки с повторами. Для второго различного значения достаточно одного прохода с двумя текущими максимумами.

Вариант, где [5, 5, 3] возвращает 3:

def second_max(nums):
    first = second = None
    for value in nums:
        if first is None or value > first:
            first, second = value, first
        elif value != first and (second is None or value > second):
            second = value
    if second is None:
        raise ValueError('Need two distinct values')
    return second

Время O(n), память O(1). Предполагаются обычные сравнимые числа без NaN. Если повторы считаются отдельными позициями, [5, 5, 3] должен дать 5 — это другой контракт, который нужно выбрать явно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее