描述
请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。
你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。
O(n^2) time is acceptable.
您在真实的面试中是否遇到过这个题? 是
样例
给一个栈:
| |
|3|
|1|
|2|
|4|
-
排序之后:
| |
|4|
|3|
|2|
|1|
-
栈会被序列化为[4,2,1,3]
,也就是说最右边是栈顶。
解题思路:
要排序的栈为stk, 申请辅助的栈为help。在stk上执行pop()操作,弹出的元素记为cur。
1、如果cur小于或等于help的栈顶元素,则将cur直接压入help
2、如果cur大于help的栈顶元素,则将help的元素逐一弹出,压入stk,直到cur小于或等于help的栈顶元素,再将cur压入help
扫描二维码关注公众号,回复:
2493600 查看本文章
一直重复上面操作,直到stk的元素全部压入help中。最后将help中的元素全部压入stk中,即完成排序。