Отсортируйте копию списка и возьмите центральный элемент, а для чётной длины — среднее двух центральных. Это решение занимает O(n log n) времени и не меняет вход.
Напишите функцию на Python, которая принимает несортированный список целых чисел и возвращает медиану.
Отсортируйте копию списка и возьмите центральный элемент, а для чётной длины — среднее двух центральных. Это решение занимает O(n log n) времени и не меняет вход.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Отсортируйте копию списка и возьмите центральный элемент, а для чётной длины — среднее двух центральных. Это решение занимает O(n log n) времени и не меняет вход.
Для пустого списка медиана не определена:
def median(values: list[int]):
if not values:
raise ValueError('empty list')
ordered = sorted(values)
n = len(ordered)
middle = n // 2
if n % 2:
return ordered[middle]
return (ordered[middle - 1] + ordered[middle]) / 2
Для [3, 1, 2] результат 2, для [4, 1, 3, 2] — 2.5. Для огромных целых и требования точной дроби можно вернуть Fraction вместо float.