Выбор ответа 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, 3, 4, -1][1, -1, 3, -1, -1]правильный ответ[5, -1, 3, -1, -1][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 ошибок.