栈和排序
问题简述
给你一个 1 到 n 的排列和一个栈,并按照排列顺序入栈
你要在不打乱入栈顺序的情况下,仅利用入栈和出栈两种操作,输出字典序最大的出栈序列
要求:时间复杂度 O(n),空间复杂度 O(n)
思路1
题目要求字典序最大,且数组中的元素确定为
1~n
;因此第一个出栈的元素一定是
n
;假设当前出栈元素为
a[i]
,则接下来有两种情况:如果当前栈顶元素大于
a[i]
之后的最大值,则循环出栈;否则继续入栈;
写法 1 为上述算法的直观实现(每次查找
a[i+1:n]
中的最大值),会超时;写法 2 预处理了每个位置之后的最大值(不包含当前位置);
写法 3 是本质上也是上述算法的实现,但是技巧性更强(只遍历一次);
它利用了题目中数组中元素为
1~n
这一特点;如果不是这些元素就会出问题;
Last updated