题目大意:设计一个能在常数时间内检索到最小元素的栈
分析:两种方法。
方法一:使用pair<min,value>,只要在进栈时让min维护着当前栈中的最小值即可。
方法二:使用辅助栈,同步维护当前栈的最小值。当进栈元素小于辅助栈栈顶时,辅助栈压入进栈元素,否则仍然压入辅助栈栈顶元素。
代码:
class MinStack {
stack<pair<int,int>> s;
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
if(s.empty()) s.push(make_pair(x,x));
else s.push(make_pair(min(x,s.top().first),x));
}
void pop() {
s.pop();
}
int top() {
return s.top().second;
}
int getMin() {
return s.top().first;
}
};
/**
* 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->getMin();
*/