实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push,pop 和min 操作,所有操作要求都在O(1)时间内完成。
注意事项
如果堆栈中没有数字则不能进行min方法的调用
样例
如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回1,2,1
class MinStack {
public:
MinStack() {
// do intialization if necessary
}
/*
* @param number: An integer
* @return: nothing
*/
void push(int number) {
// write your code here
if (mins.empty() || mins.top() > number) {
mins.push(number);
} else {
mins.push(mins.top());
}
nums.push(number);
}
/*
* @return: An integer
*/
int pop() {
// write your code here
assert(!nums.empty());
int number = nums.top();
nums.pop();
mins.pop();
return number;
}
/*
* @return: An integer
*/
int min() {
// write your code here
assert(!mins.empty());
return mins.top();
}
private:
stack<int> mins;
stack<int> nums;
};