题目
思路
为了返回栈中的最小元素,我们需要额外维护一个辅助栈 min_stack,它的作用是记录当前栈中的最小值。
min_stack的作用:
min_stack的栈顶元素始终是当前栈 st 中的最小值。
每当st中压入一个新元素时,如果这个元素小于等于 min_stack 的栈顶元素,就将它也压入 min_stack。
每当st中弹出一个元素时,如果这个元素等于 min_stack 的栈顶元素,就将 min_stack 的栈顶元素也会弹出。
代码
class MinStack {
public:
/** initialize your data structure here. */
stack<int> st;
stack<int> min_stack;
MinStack() {}
void push(int x) {
st.push(x);
if(min_stack.empty() || min_stack.top() >= x)
min_stack.push(x);
}
void pop() {
if(min_stack.top() == st.top())
min_stack.pop();
st.pop();
}
int top() {
return st.top();
}
int getMin() {
return min_stack.top();
}
};