Для данного массива A вычисление B st B [i] сохраняет ближайший элемент слева от A [i], который меньше, чем A [i]

Учитывая массив A [1..n] , мы хотим вычислить другой массив B [1..n] такой, что B [i] сохраняет ближайший элемент слева от A [i] , который меньше, чем A [i] . Сложность времени должна быть O (n) .

(Для i> 1 , если нет таких меньших элементов слева, то B [i] просто содержит A [i] и B [1] = A [1] .)

Пример:

ввод: 6,9,12,17 , 11
вывод: 6,6, 9, 12, 9

Я думал о реализации стека,
поместите A [1] в B [1] , затем поместите в стек.
для заполнения B [i] , сравните A [i] с элементами стека и выталкивайте, пока не получите меньший элемент.
наконец, вставьте A [i] в стек.

Правильно ли приведенный выше подход и есть ли более дешевое решение?

6
задан lennon310 15 September 2014 в 16:09
поделиться