将栈底元素设为-1可以免去判断是否真实存在更小值而直接输出-1.
if else 和 if if的判断区别在于,if else的判断条件是同一个条件,而if if 可能是平行条件,如果将下文中的else改成if的话,栈的元素会增多,是因为栈有可能会满足一个条件,经过操作后又在时间顺序上满足了第二个条件。
N = int(input())
sequence = list(map(int, input().split()))
ans = []
stack = [-1]
for i in range(N):
if sequence[i] > stack[-1]:
ans.append(stack[-1])
stack.append(sequence[i])
else:
while sequence[i] <= stack[-1] and len(stack) > 0:
del stack[-1]
ans.append(stack[-1])
stack.append(sequence[i])
print(' '.join(list(map(str, ans))))
初始化为
-1
这个小技巧真好,谢谢分享!