您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 2浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

栈和排序

IT之一小佬 发布时间:2021-09-03 15:38:22 ,浏览量:2

给你一个 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             
关注
打赏
1665675218
查看更多评论
0.1280s