-
Notifications
You must be signed in to change notification settings - Fork 0
155. Min Stack
Jacky Zhang edited this page Aug 22, 2016
·
3 revisions
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.
解题思路为two stack。 维护两个stack,一个正常的stack,另一个minStack维护min数据。 每当将x push入stack时,若x <= min,则同时将x push入minStack。 pop时,若minStack和stack值相等,则将minStack中的值也pop出来,需注意的是由于存入的是Integer对象,因此不能用==来判断相等,应使用equal()方法。
public class MinStack {
/** initialize your data structure here. */
private Stack<Integer> stack, minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if(minStack.empty() || x <= minStack.peek()) {
minStack.push(x);
}
}
public void pop() {
if(stack.pop().equals(minStack.peek())) {
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/