Выбор ответа Middle Стек и монотонный стек обновлено

Монотонный стек: что выведет

Вопрос

Что выведет код?

const a = [2, 5, 1, 3, 3];
const res = new Array(a.length).fill(-1);
const st = [];
for (let i = 0; i < a.length; i++) {
  while (st.length && a[st.at(-1)] < a[i]) res[st.pop()] = i;
  st.push(i);
}
console.log(res);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: [1, -1, 3, -1, -1]. В res пишутся индексы ближайшего строго большего справа. i=1: 5 2, res[0] = 1. i=3: 3 1, res[2] = 3, а 5 не меньше 3, остаётся. i=4: 3 < 3 ложно, ничего не снимаем.

Варианты ответа

  1. [1, -1, 3, 4, -1]
  2. [1, -1, 3, -1, -1]правильный ответ
  3. [5, -1, 3, -1, -1]
  4. [1, 2, 3, 4, -1]

Разбор

В res пишутся индексы ближайшего строго большего справа. i=1: 5 > 2, res[0] = 1. i=3: 3 > 1, res[2] = 3, а 5 не меньше 3, остаётся. i=4: 3 < 3 ложно, ничего не снимаем. Индексы 1, 3, 4 остаются с -1.

  • [1, -1, 3, 4, -1]: так было бы при нестрогом сравнении <=.
  • [5, -1, 3, -1, -1]: смешаны значения и индексы, код пишет i, а не a[i].
  • [1, 2, 3, 4, -1]: это просто «следующий индекс», без сравнения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме