给你一个 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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?