leetcode链接:https://leetcode.cn/problems/min-stack/description/
思路:
准备两个栈,一个存放数据的栈,一个最小栈(依次存放最小值)。存放数组的栈 push
、top
、pop
都是常规操作,唯一不同的是 getMin
,当每次 push
的时候检查一下当前 push
的数据是否比最小栈的栈顶元素数据小,若当前最小为空那么直接入栈即可。而 pop
的时候先判断当前出栈元素是否和最小栈栈顶元素相等,若相等那么最小栈也要出栈。而 getMin
则直接取最小栈的栈定元素。
ps:
上图解释的是为什么 val <= min_stack.top()
这里需要加等于。
代码:
class MinStack {
public:
MinStack() {
}
void push(int val) {
data_stack.push(val);
if (min_stack.empty() || val <= min_stack.top()) {
min_stack.push(val);
}
}
void pop() {
int pop_val = data_stack.top();
data_stack.pop();
if (pop_val == min_stack.top()) {
min_stack.pop();
}
}
int top() {
return data_stack.top();
}
int getMin() {
return min_stack.top();
}
private:
stack<int> data_stack;
stack<int> min_stack;
};