什么是最小栈?
就是说,把一组数据压入栈后,每次弹出的都是栈中最小的那个数据。
怎么实现呢?
思路:可以用两个栈实现,一个栈中压入数据,然后把最小的数据存放在另外一个栈中
入下图所示。
其中需要用到的函数接口如上图左边所示。
数据压入左栈后,如果右栈中此时没有数据,直接把左栈中的数弹出后再压入到右栈。再次压入右栈的数据就需要跟栈顶的的元素大小进行比较,如果小于等于栈顶元素时才压入,,这样出栈的时候都是最小的数。
具体代码如下:
class MinStack {
public:
stack<int> normal;
stack<int> min;
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
normal.push(x);
if(min.empty()||x<=min.top())
{
min.push(x);
}
else
{
min.push(min.top());
}
}
void pop() {
normal.pop();
min.pop();
}
int top() {
return normal.top();
int getMin() {
return min.top();
}
};