题目
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。
示例1:
输入: ["SortedStack", "push", "push", "peek", "pop", "peek"] [[], [1], [2], [], [], []] 输出: [null,null,null,1,null,2]
示例2:
输入: ["SortedStack", "pop", "pop", "push", "pop", "isEmpty"] [[], [], [], [1], [], []] 输出: [null,null,null,null,null,true]
解题
方法一:辅助栈
就是在leetcode-232:用栈实现队列的思路上稍加改动
st1
是一个单调递减栈
st2
是辅助栈
当输入val的时候,将小于val
的暂时放入st2
中,然后将val
放入st1
中,再把st2
的放回来。
这样子就可以保持st1
的单调递减
class SortedStack { public: stack<int> st1; stack<int> st2; SortedStack() { } void push(int val) { while(!st1.empty()&&st1.top()<val){ st2.push(st1.top()); st1.pop(); } st1.push(val); while(!st2.empty()){ st1.push(st2.top()); st2.pop(); } } void pop() { if(!st1.empty()){ st1.pop(); } } int peek() { if(!st1.empty()){ return st1.top(); } else return -1; } bool isEmpty() { return st1.empty(); } };