Ctrl K

Суммы самых частых в окне: большие данные

Сложная
Дан массив values длины n и два числа width и top. Для любого отрезка массива определим его **частотную сумму** так: 1. Посчитайте, сколько раз встречается каждое значение. 2. Упорядочьте различные значения по частоте; при равной частоте частым считается большее значение. 3. Оставьте только top самых частых значений (все их вхождения) и сложите оставленные элементы. Если различных значений меньше top, частотная сумма равна сумме всего отрезка. Верните массив из n - width + 1 чисел, где i-е число — частотная сумма отрезка values[i..i + width - 1]. Массив может содержать до 10⁵ элементов, так что пересчитывать каждое окно с нуля слишком долго.
Пример 1
values=[4, 4, 1, 2, 2, 7], width=4, top=2 → [10, 8, 11]

В окне [4, 4, 1, 2] чаще всех 4 (дважды), а из встречающихся по разу 1 и 2 берём большее — 2: 4 + 4 + 2 = 10. В окне [4, 1, 2, 2] остаются 2, 2 и 4: сумма 8. В окне [1, 2, 2, 7] — 2, 2 и 7: сумма 11.

Пример 2
values=[9, 3, 9], width=3, top=3 → [21]

Различных значений всего два, это меньше top = 3, поэтому частотная сумма — сумма всего окна: 21.

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

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