用两个栈去接受数据,其中一个栈在入栈时,只更新比他小的值,这样保证栈顶最小,
在出栈时,比较两个栈的栈顶元素,相同一起出栈,代码用 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();
*/