Войти Регистрация
Алгоритмы

186. Через сколько лотков посылка тяжелее

Средняя

Сортировочный конвейер на складе Wildberries замкнут в кольцо из n лотков. weights[i] — вес посылки в граммах на лотке i, лента идёт от i к i + 1, после последнего лотка — снова нулевой.

Для каждого лотка верните, через сколько шагов по ходу ленты встретится посылка строго тяжелее. Если такой нет на всём кольце, верните −1.

В работе: Манипулятор снимает тяжёлые посылки на отдельную паллету и ждёт следующую тяжелее текущей: на кольце 20 000 лотков, наивный обход — до 4·10⁸ сравнений за круг.

Пример 1

Ввод
weights = [900, 300, 1200, 400, 1200]
Вывод
[2, 1, -1, 1, -1]

От последнего лотка (1200 г) лента идёт к 900, 300 и 1200 — тяжелее нет, −1.

Пример 2

Ввод
weights = [500, 700, 200]
Вывод
[1, -1, 1]

От 200 г через один шаг — 500 г.

Ограничения

  • 1 ≤ n ≤ 2·10⁵
  • 1 ≤ weights[i] ≤ 10⁵
  • Лимит — 2 с на тест (1500 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def steps_to_heavier(weights):
Монотонный стекКольцевой массивцельO(n)

Источник: наша задача на данных Wildberries. Условие пересказано своими словами.