lintcode练习-229. 栈排序

描述

请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。

你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。

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中,即完成排序。

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81192476