Сжатие отсортированного массива: убрать дубликаты на месте и вернуть длину значимой части
Реализуйте функцию dedup_sorted(nums).
Вход: nums — список целых чисел, отсортированный по неубыванию (могут быть отрицательные, нули и повторы).
Выход: целое число k — количество различных значений.
Дополнительное требование: функция обязана изменить сам список nums на месте так, чтобы первые k элементов содержали различные значения в исходном порядке возрастания. Что лежит в nums начиная с индекса k — не важно, тесты туда не смотрят. Возвращать новый список нельзя: проверяется именно состояние переданного списка.
Краевые случаи:
- пустой список: вернуть
0; - список из одного элемента: вернуть
1; - список из одинаковых значений: вернуть
1; - список без повторов: вернуть
len(nums), содержимое не меняется.
Требование по сложности: один проход, O(n) времени и O(1) дополнительной памяти — нельзя создавать вспомогательный список или множество той же длины.
заготовка решения
def dedup_sorted(nums):
# ваш код
pass