Антифрод Сбера сравнивает новый платёж клиента с медианой последних k платежей: среднее арифметическое портит одна покупка машины, медиана — нет.
Дан список сумм amounts в рублях по времени и размер окна k. Для каждого окна amounts[i..i+k-1] верните нижнюю медиану — элемент с номером (k − 1) // 2 (с нуля) в отсортированном окне. Всего n − k + 1 значений.
В работе: Платёж в 20 раз выше медианы последних 30 операций — повод спросить подтверждение в СМС.
Пример 1
Ввод
amounts = [500, 1200, 300, 300, 90000, 700, 800] k = 3
Вывод
[500, 300, 300, 700, 800]
Окно [500, 1200, 300] → 500; покупка за 90 000 медиану почти не сдвигает.
Пример 2
Ввод
amounts = [400, 100, 300, 200] k = 2
Вывод
[100, 100, 200]
При чётном k берём меньший из двух средних.
Ограничения
- 1 ≤ k ≤ n ≤ 10⁵
- 1 ≤
amounts[i]≤ 10⁹ - Лимит — 3 с на тест (3000 мс).
Как вызывается ваш код
Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула.
print() и console.log() уходят в консоль.
def window_medians(amounts, k):
Источник: наша задача на данных Сбера. Условие пересказано своими словами.
Давали на собеседовании?
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.