问题
思路
用一个变量min保存最小值肯定不行。
因为一旦该元素出栈,不行了。
所以,建立辅助栈。这个栈保存曾经的最小元素。
当然,不会出现这个栈为空,而主栈不为空的情形。
比如,7,8,1
主栈 7->8->1
辅助栈 7->1
8一定会在7之前出栈,否则他就一定比8小。
代码
class MinStack {
public:
/** initialize your data structure here. */
MinStack(){
}
void push(int x) {
stk.push(x);
if(helper.empty()) helper.push(x);
else if( x <= helper.top() ) helper.push(x);
}
void pop() {
if( stk.top() == helper.top() ){ stk.pop(); helper.pop(); }
else stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return helper.top();
}
private:
stack<int> stk;
stack<int> helper; // 存储曾经的最小元素
};
/**
* 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();
*/