给你一个 1 到 n 的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,仅利用入栈和出栈两种操作,对数组进行从大到小排序,输出排序结果
当无法完全排序时,请输出字典序最大的出栈序列
复杂度要求:
O(n)
示例1
输入:
[2,1,5,3,4]
返回值:
[5,4,3,1,2]
说明:
操作 栈 结果 2 入栈;[2] [] 1 入栈;[2\1] [] 5 入栈;[2\1\5] [] 5 出栈;[2\1] [5] 3 入栈;[2\1\3] [5] 4 入栈;[2\1\3\4] [5] 4 出栈;[2\1\3] [5,4] 3 出栈;[2\1] [5,4,3] 1 出栈;[2] [5,4,3,1] 2 出栈;[] [5,4,3,1,2]
示例代码:
#
# 栈排序
# @param a int整型一维数组 描述入栈顺序
# @return int整型一维数组
#
class Solution:
def solve(self, a):
# write code here
stack = [] # 定义一个栈来存放数据
n = len(a)
res = [] # 用来返回结果
vis = [0] * (n + 1)
for i in a:
stack.append(i) # 压入栈
vis[i] = 1 # 压入一个数就把对应的数字标记为1
while n and vis[n]: # 检测现有栈中有多少个数出现了就是较大的哪些数出现
n -= 1
while stack and n
关注
打赏