K наименьших элементов: вернуть их по возрастанию, не сортируя весь список
Реализуйте функцию k_smallest(nums, k).
Вход: nums — список целых чисел (могут быть отрицательные, нули и повторы), k — целое число.
Выход: новый список из k наименьших значений, отсортированный по возрастанию. Повторы сохраняются: если наименьшее значение встречается дважды и оба попадают в k, оба должны быть в ответе.
Краевые случаи:
- если
k <= 0, верните пустой список[]; - если
k >= len(nums), верните все элементы, отсортированные по возрастанию; - пустой список даёт
[]при любомk.
Дополнительное требование: исходный список nums изменять нельзя — ни его порядок, ни содержимое.
Требование по сложности: решение должно работать за O(n log k) и держать в памяти порядка k элементов, а не n. Модуль heapq использовать можно и нужно.
заготовка решения
def k_smallest(nums, k):
# ваш код
pass