题目
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
解答
利用两个栈,一个存放数据,用于支持top,一个存放最小值,用于支持getMin.
需要注意,x <= smin.top()
这里不能用<,否则push相同的最小值时,存放最小值的栈将只有一个,pop过后再次getMin将出错!
以下为代码:
class MinStack {
public:
/** initialize your data structure here. */
stack<int> s;
stack<int> smin;
MinStack() {
}
void push(int x) {
s.push(x);
if (smin.empty() || x <= smin.top())
smin.push(x);
return;
}
void pop() {
if (s.top() == smin.top())
smin.pop();
s.pop();
}
int top() {
return s.top();
}
int getMin() {
return smin.top();
}
};