Ctrl K

Короткий отрезок с нужной суммой

Сложная
Небольшая кофейня записывает прибыль за каждый день в массив profits; в плохие дни число отрицательное. Владелец хочет найти самый короткий отрезок из подряд идущих дней, суммарная прибыль за который не меньше goal. Верните длину такого отрезка (число дней в нём, минимум один день). Если ни один непрерывный отрезок не набирает goal, верните -1.
Пример 1
profits=[3, -4, 2, 5, -1, 4], goal=7 → 2

Подряд идущие дни 2, 5 дают ровно 7 — это 2 дня. Одного дня не хватает: максимум за день 5.

Пример 2
profits=[4, -10, 4], goal=5 → -1

Прибыльные дни разделены убыточным, и никакой непрерывный отрезок не набирает 5. Ответ -1.

Пример 3
profits=[1, 1, 1, 1], goal=4 → 4

Сумма 4 набирается только всеми четырьмя днями.

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

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