题目描述:
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
解题思路:
设计两个栈,一个用来进行pop,push操作,另一个进行getmin操作。
入栈时如果当前值小于最小栈的top值就把这个值放入两个栈,出栈时如果第一个栈和最小栈的top值相等,就都出栈。
代码:
class MinStack {
private:
stack<int> stk;
stack<int> min;
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
stk.push(x);
if(min.empty() || min.top()>=x)
min.push(x);
}
void pop() {
if(stk.top()==min.top()) {
min.pop();
stk.pop();
}
else
stk.pop();
}
int top() {
if(!stk.empty())
return stk.top();
else
return NULL;
}
int getMin() {
if(!stk.empty())
return min.top();
else
return NULL;
}
};