Что такое монотонный c стек? (и, например, чем она отличается от монотонной c очереди?)
Например, рассмотрим следующий массив целых чисел: [0, 2, 1, 3, 4]
. Если я обработаю этот массив слева направо, вставив его в монотонно уменьшающийся стек, что я должен видеть в стеке и почему?
Здесь - это пример для монотонно убывающий стек в Python, который, очевидно, используется во многих решениях, которые решают проблему нечетно-четного скачка :
def make(A):
result = [None] * N
stack = [] # invariant: stack is decreasing
for i in A:
while stack and i > stack[-1]:
result[stack.pop()] = i
stack.append(i)
return result
Если я запускаю его на следующем входе A = [0, 2, 1, 3, 4]
Я получаю [2, 3, 3, 4, None]
. Я нахожу это странным, потому что он включает в себя два 3 и значение None
. Действительно ли это правильно реализует монотонный c стек?