栈排序
- 难度:Medium
- 题目链接:https://leetcode-cn.com/problems/sort-of-stacks-lcci/
题目描述
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作: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]
说明:
- 栈中的元素数目在[0, 5000]范围内。
解法:
如果栈顶元素小于 val
,就把小于 val
的元素全部 push 到另一个栈中。然后将 val
入栈,再把另一个栈中的元素转移过来。
class SortedStack {
public:
SortedStack() {
}
void push(int val) {
while(!stk1.empty() && stk1.top() < val){
stk2.push(stk1.top());
stk1.pop();
}
stk1.push(val);
while(!stk2.empty()){
stk1.push(stk2.top());
stk2.pop();
}
}
void pop() {
if(stk1.empty()){
return;
}
stk1.pop();
}
int peek() {
if(stk1.empty()){
return -1;
}
return stk1.top();
}
bool isEmpty() {
return stk1.empty();
}
private:
stack<int> stk1;
stack<int> stk2;
};