用两个栈去接受数据,其中一个栈在入栈时,只更新比他小的值,这样保证栈顶最小,
在出栈时,比较两个栈的栈顶元素,相同一起出栈,代码用 vector 模拟栈
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
s1.push_back(x);
if (s2.empty() || x <= s2.back()) {
s2.push_back(x);
}
}
void pop() {
if (s2.back() == s1.back()) {
s2.pop_back();
}
s1.pop_back();
}
int top() {
return s1.back();
}
int min() {
return s2.back();
}
private:
vector<int> s1;
vector<int> s2;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/
本文介绍了一种使用两个栈来维护数据的方法,其中一个栈始终保持其顶部元素为所有元素中的最小值。通过这种方式,在进行出栈操作时能够同时更新最小值栈,确保随时获取到当前数据集中的最小值。
293

被折叠的 条评论
为什么被折叠?



