Вступить в клуб →
средняяpythonМассивы, строки и два указателя

Сжатие отсортированного массива: убрать дубликаты на месте и вернуть длину значимой части

Реализуйте функцию dedup_sorted(nums).

Вход: nums — список целых чисел, отсортированный по неубыванию (могут быть отрицательные, нули и повторы).

Выход: целое число k — количество различных значений.

Дополнительное требование: функция обязана изменить сам список nums на месте так, чтобы первые k элементов содержали различные значения в исходном порядке возрастания. Что лежит в nums начиная с индекса k — не важно, тесты туда не смотрят. Возвращать новый список нельзя: проверяется именно состояние переданного списка.

Краевые случаи:

  • пустой список: вернуть 0;
  • список из одного элемента: вернуть 1;
  • список из одинаковых значений: вернуть 1;
  • список без повторов: вернуть len(nums), содержимое не меняется.

Требование по сложности: один проход, O(n) времени и O(1) дополнительной памяти — нельзя создавать вспомогательный список или множество той же длины.

заготовка решения

def dedup_sorted(nums):
    # ваш код
    pass

🔒 Проверка ответа — для участников клуба

  • Автотесты прямо в браузере
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела