Ctrl K

Разнообразие в окне

Средняя
Метеостанция записала показания датчика: массив целых чисел values. Аналитик смотрит на них через окно ширины width — подряд идущий отрезок из width показаний — и сдвигает окно на одну позицию от начала до конца. Верните массив, в котором i-й элемент — количество различных значений в окне values[i..i + width - 1]. Окон всего len(values) - width + 1. Пересчитывать каждое окно с нуля долго — попробуйте уложиться в O(n).
Пример 1
values=[4, 8, 4, 4, 6, 8], width=3 → [2, 2, 2, 3]

Окна: [4, 8, 4] — 2 разных, [8, 4, 4] — 2, [4, 4, 6] — 2, [4, 6, 8] — 3.

Пример 2
values=[9, 9, 9, 2], width=1 → [1, 1, 1, 1]

В окне из одного элемента всегда ровно одно значение.

Пример 3
values=[3, 1, 3, 2, 1], width=5 → [3]
Ограничения
  • 1 ≤ width ≤ len(values) ≤ 10⁵
  • 1 ≤ values[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОтрезок плейлиста из двух жанров СредняяОкна с заданным числом тревог СредняяОтрезки с k нечётными СредняяДва отрезка с нужной суммой СредняяСнять с краёв ровно столько Средняя
загружаем Python…
Вход
values=[4, 8, 4, 4, 6, 8], width=3
Ожидается
[2, 2, 2, 3]

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