Ctrl K

Медиана в скользящем окне

Сложная
Аналитик следит за ценой товара: массив prices — цены по дням. Чтобы сгладить выбросы, он смотрит на окно из width подряд идущих дней, начиная с первого, и сдвигает его вправо по одному дню до конца массива. Для каждого положения окна нужна **медиана** цен в нём. Если упорядочить числа окна по возрастанию, то при нечётной ширине медиана — центральное число, а при чётной — среднее арифметическое двух центральных. Например, у [2, 7, 3] медиана 3, а у [4, 1, 6, 2] — (2 + 4) / 2 = 3. Верните медианы всех окон в порядке сдвига. Ответ принимается с точностью до 10⁻⁵.
Пример 1
prices=[5, 1, 4, 8, 2], width=3 → [4, 4, 4]

Окна [5, 1, 4], [1, 4, 8], [4, 8, 2]; в отсортированном виде средние элементы — 4, 4 и 4.

Пример 2
prices=[3, 9, 6, 6], width=2 → [6.0, 7.5, 6.0]

При чётной ширине медиана — среднее двух центральных чисел: (3 + 9) / 2 = 6, (9 + 6) / 2 = 7.5, (6 + 6) / 2 = 6.

Пример 3
prices=[-7], width=1 → [-7]

Одно окно из одного числа.

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

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