class MinStack {
public:
void push(int x) {
if (mini.empty())
{
mini.push(x);
mystack.push(x);
return;
}
if (mini.top()>=x)
{
mini.push(x);
}
mystack.push(x);
return;
}
void pop() {
if(!mystack.empty())
{
if(mystack.top()==mini.top())
{
mini.pop();
}
mystack.pop();
}
}
int top() {
return mystack.top();
}
int getMin() {
return mini.top();
}
stack<int> mini;
stack<int> mystack;
};
这道题的关键在于
mini.top()>=x
这句,我试了很多次没过是因为没有加=号,因为我认为只要不是最小的才往mini栈里添加最小元素。但是因为最小的元素可能有多个,所以每个最小的元素如果只记一次,一旦清除了就不知道后面有没有这个最小的元素了。后来我又设计了一个计数器,用来记录每个最小元素的个数,结果那个方法报超出内存限制的错误,所以最好就是这个方法。