定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:
需要一个辅助栈,来保存,每当有新的元素压入或弹出时,保持当前状态辅助栈的栈顶都是主栈的最小元素。
如何实现呢?
下图演示了具体过程:
代码:
class Solution {
private:
stack<int> p1;//主栈
stack<int> p2;//辅助栈
public:
void push(int value) {
p1.push(value);
if(p2.size()==0||p2.top()>value)
p2.push(value);
else p2.push(p2.top());
}
void pop() {
//if(p1.size()>0&&p2.size()>0)
{p1.pop();
p2.pop();}
}
int top() {
return p1.top(); //不需要检查是否为空,外部调用时会检查的
}
int min() {
return p2.top();
}
};