Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Монотонный стек

O(n)

Держи значения в стеке строго возрастающими (или убывающими) снизу вверх, снимая каждый элемент, который проигрывает новому, перед тем как его положить; каждое снятие как раз находит ближайший больший (или меньший) элемент.

Сигналы

ближайший больший / ближайший меньший элементсколько дней ждать потеплениянаибольший прямоугольник в гистограммесколько воды соберётся между столбикамиотрезок/серия, заканчивающаяся первым большим или меньшим значением

Шаблон

function nextGreater(nums) {
    const result = new Array(nums.length).fill(-1);
    const stack = [];
    for (let i = 0; i < nums.length; i++) {
        while (stack.length && nums[stack[stack.length - 1]] < nums[i]) {
            result[stack.pop()] = nums[i];
        }
        stack.push(i);
    }
    return result;
}

Похоже, но не то

  • Стек: Обычный стек сопоставляет пары в порядке появления (открывающая со своей закрывающей). За монотонным стеком тянутся именно тогда, когда вопрос про ближайший больший/меньший элемент, а это требует держать стек отсортированным, а не просто сбалансированным.

n до 1e5 элементов -> O(n): каждый элемент кладётся один раз и снимается не более одного раза, хотя внешне похоже на вложенный цикл.

Изучить этот паттерн