最小栈
我们通过2个栈来保存入栈的数
其中第一个栈正常保存所有入栈的数
第二个栈就需要进行判断要入栈的元素和顶部的元素的大小关系
如果顶部的数大,则正常入栈
反之,则入栈一个顶部的数(原来的数不入栈)
当出栈的时候
2个栈都要出栈
计算顶部的数的时候,返回第一个栈的顶部元素即可
计算最小的数的时候,返回第二个栈的顶部元素
下面附上代码
class MinStack {public:
/** initialize your data structure here. */
MinStack() {}
void push(int x)
{
l1.push(x);
if(l2.empty())
{
l2.push(x);
}
else
{
int t=l2.top();
l2.push((x<t)?x:t);
}
}
void pop()
{
l1.pop();
l2.pop();
}
int top()
{
return l1.top();
}
int getMin()
{
return l2.top();
}
private:
stack<int> l1;
stack<int> l2;
};
/** * Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x); * obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin(); */