Получение N наибольших элементов из динамического массива

Приведённая сортировка уже решает задачу для неотрицательного n. Добавьте валидацию n; при небольшом n относительно размера списка можно использовать heapq.nlargest.

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

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

Приведённая сортировка уже решает задачу для неотрицательного 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 сортировка также уместна.

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

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

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

Подробнее