1、思路
-
每当要进行
push
操作时,对比待插入值与栈顶元素值的大小,若栈顶值较小就把栈顶元素逐个弹出到辅助栈help
中,在合适的位置插入val
; -
把辅助栈
help
中的元素全都倒回原栈stk
中,即可保持栈有序。
2、代码
class SortedStack {
private:
stack<int> stk, help;
public:
SortedStack() {
}
void push(int val) {
while (!stk.empty() && val > stk.top()) //对比栈顶元素,并弹出栈顶
{
help.push(stk.top());
stk.pop();
}
stk.push(val); //将val插入到合适位置
while (!help.empty()) //辅助栈倒回原栈中
{
stk.push(help.top());
help.pop();
}
}
void pop() {
if (!stk.empty())
{
stk.pop();
}
}
int peek() {
if (!stk.empty())
{
return stk.top();
}
return -1;
}
bool isEmpty() {
return stk.empty();
}
};