Ctrl K

Сжать повторы в отсортированном массиве

Лёгкая
Датчик пишет показания в массив values, и они уже отсортированы по неубыванию, поэтому одинаковые значения стоят подряд. Нужно убрать повторы прямо в этом массиве, без копии. Пусть k — количество различных значений. Измените values так, чтобы первые k элементов были этими различными значениями в исходном порядке (то есть по возрастанию). Что останется после первых k элементов, неважно. Верните k. Попробуйте обойтись одним проходом и O(1) дополнительной памяти.
Пример 1
values=[-2, -2, 0, 5, 5, 5] → 3

Различных значений три: -2, 0, 5. Функция возвращает 3, а массив начинается с [-2, 0, 5, …].

Пример 2
values=[7] → 1

Единственный элемент уже уникален: ответ 1.

Пример 3
values=[1, 2, 2, 3, 3, 3, 4] → 4
Ограничения
  • 1 ≤ len(values) ≤ 3·10⁴
  • -100 ≤ values[i] ≤ 100
  • values отсортирован по неубыванию
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВыкинуть лишнее значение ЛёгкаяСлияние в запасной хвост ЛёгкаяНули в конец ЛёгкаяЗначения в обоих списках ЛёгкаяОбщие значения с повторами Лёгкая
загружаем Python…
Вход
values=[-2, -2, 0, 5, 5, 5]
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 130 тестов на сервере, включая скрытые.