🔗 leetcode.cn/problems/mi…
题目
- 实现一个 stack,可以 o1 返回 stack 的最小值
思路
- 刚开始套单调队列了,后来发现并不需要那么麻烦
- 每次记录比当前栈顶还小的值,形成一个 min_stack,有 pop 就判断是不是 min_stack 的 top 也被 pop 了,更新维护下 min_stack
- 就是性能不咋优
代码
class MinStack {
public:
MinStack() {
size = 0;
}
void push(int val) {
st.push(val);
size++;
if (mon.empty()) {
mon.push(make_pair(val, size));
return;
}
if (mon.top().first >= val) {
mon.push(make_pair(val, size));
}
}
void pop() {
st.pop();
if (mon.top().second == size) {
mon.pop();
}
size--;
}
int top() {
return st.top();
}
int getMin() {
return mon.top().first;
}
stack<int> st;
stack<pair<int, int>> mon;
int size;
};