题目要求:按序入栈,输出最大字典序的出栈结果。换言之,查找a[i]后最大的数max,当max<a[i]时,将a[i]出栈,然后反向检索辅助栈将大于max的一并出栈;当max>=a[i]时,将a[i]入栈到辅助栈。
思路流程:
- 构造辅助数组temp, temp[i]表示a[i+1:]中的max。其中temp的实现比较巧妙。temp[-1]=-inf,反向遍历a[:-2],取max(a[i+1],temp[i+1])作为temp[i]的值,因为temp[i+1]表示a[i+2:]的max,所以a[i+1:]的max可以通过a[i+1]和temp[i+1]比较获得,一种dp思想。
- 构造辅助栈stack,用来存放暂不出栈的元素,以及实现后续连续出栈
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 栈排序
# @param a int整型一维数组 描述入栈顺序
# @return int整型一维数组
#
class Solution:
def solve(self , a: List[int]) -> List[int]:
# write code here
temp=[0]*len(a)
temp[-1]=-float('inf')
stack=[]
res=[]
for i in range(len(a)-2,-1,-1):
temp[i]=max(a[i+1],temp[i+1])
for i in range(len(a)):
if a[i]<=temp[i]:
stack.append(a[i])
else:
res.append(a[i])
while stack and stack[-1]>temp[i]:
res.append(stack.pop())
return res