Приведённая сортировка уже решает задачу для неотрицательного n. Добавьте валидацию n; при небольшом n относительно размера списка можно использовать heapq.nlargest.
Получение N наибольших элементов из динамического массива
Приведённая сортировка уже решает задачу для неотрицательного n. Добавьте валидацию n; при небольшом n относительно размера списка можно использовать heapq.nlargest.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте два метода. Первый метод принимает число и помещает его в внутренний массив, второй – возвращает N самых больших значений из этого массива.
class TopNumbers:
def __init__(self):
self.storage = []
def add(self, value: int) -> None:
# добавить число в список
self.storage.append(value)
def get_top(self, n: int) -> list[int]:
# вернуть n максимальных чисел
return sorted(self.storage, reverse=True)[:n]
Ответ
Приведённая сортировка уже решает задачу для неотрицательного n. Добавьте валидацию n; при небольшом n относительно размера списка можно использовать heapq.nlargest.
import heapq
class TopNumbers:
def __init__(self):
self.storage = []
def add(self, value: int) -> None:
self.storage.append(value)
def get_top(self, n: int) -> list[int]:
if n < 0:
raise ValueError("n must be non-negative")
return heapq.nlargest(n, self.storage)
Повторы сохраняются; при n=0 результат пуст, при n больше размера возвращаются все значения по убыванию. Исходный список не меняется. Для малого положительного n выбор через кучу требует порядка O(m log n), где m — число элементов; при больших n сортировка также уместна.