Уточните, нужен второй различный максимум или второй элемент после сортировки с повторами. Для второго различного значения достаточно одного прохода с двумя текущими максимумами.
Функция, возвращающая второе по величине значение в массиве
Уточните, нужен второй различный максимум или второй элемент после сортировки с повторами. Для второго различного значения достаточно одного прохода с двумя текущими максимумами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, которая принимает список чисел и возвращает элемент, являющийся вторым по величине в этом списке.
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 — это другой контракт, который нужно выбрать явно.