题目描述
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()之后就难找到最小值了。可以用一个堆栈存放最小值,存放当前最小值。
java代码
public class MinStack {
LinkedList<Integer> stack;
LinkedList<Integer> minStack;
//Integer min;
/** initialize your data structure here. */
public MinStack() {
stack = new LinkedList<Integer>();
minStack = new LinkedList<Integer>();
}
public void push(int x) {
if (stack.isEmpty()) {
stack.push(x);
minStack.push(x);
}
else {
stack.push(x);
minStack.push(Math.min(minStack.peek(), x));
}
}
public void pop() {
if (stack.isEmpty()) return;
stack.pop();
minStack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return (int)minStack.peek();
}
}