class MinStack {
private:
stack<int> stk;
stack<int> min;
public:
void push(int x) {
stk.push(x);
if(min.empty())
min.push(x);
else
{
if(x<=min.top()) //特别注意,一定要有等于号。 重复出现的最小值必须重复进min,不然出stk的时候,min可能会为空出错
min.push(x);
}
}
void pop() {
if(!stk.empty()&&stk.top()==min.top())
{
stk.pop();
min.pop();
}
else
stk.pop();
}
int top() {
// if(!stk.empty())
return stk.top();
}
int getMin() {
return min.top();
}
private:
stack<int> stk;
stack<int> min;
public:
void push(int x) {
stk.push(x);
if(min.empty())
min.push(x);
else
{
if(x<=min.top()) //特别注意,一定要有等于号。 重复出现的最小值必须重复进min,不然出stk的时候,min可能会为空出错
min.push(x);
}
}
void pop() {
if(!stk.empty()&&stk.top()==min.top())
{
stk.pop();
min.pop();
}
else
stk.pop();
}
int top() {
// if(!stk.empty())
return stk.top();
}
int getMin() {
return min.top();
}
};
此题刚开始没思路,发现用两个栈可以完美解决问题。