描述
实现一个带有取最小值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:
stack<int> date;
stack<int> mins;
MinStack() {
// do initialization if necessary
}
void push(int number) {
// write your code here
date.push(number);
if (mins.size() ==0 || mins.top() >=number) {
mins.push(number);
}
else {
mins.push(mins.top());
}
}
int pop() {
// write your code here
if (mins.size()>0 && date.size() > 0) {
int t = date.top();
date.pop();
mins.pop();
return t;
}
return 0;
}
int min() {
// write your code here
if (mins.size()>0 && date.size() > 0)
return mins.top();
return 0;
}
};
这个算法是我见过的逻辑最为清楚简单的算法 虽然多使用了一倍的栈空间。