155. Min Stack

#### QUESTION:

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.
``````

#### SOLUTION:

``````public class MinStack {
Stack<Integer> stack;
int min;

/** initialize your data structure here. */
public MinStack() {
stack = new Stack<Integer> ();
min = Integer.MAX_VALUE;
}

public void push(int x) {
if(x <= min){
stack.push(min);
min = x;
}
stack.push(x);

}

public void pop() {
if(stack.isEmpty()){
return;
}

int pop = stack.pop();
if(pop == min){
min = stack.pop();
}

}

public int top() {
return stack.peek();
}

public int getMin() {
return min;

}
}

public class MinStack {

ArrayList<Integer> list;
Stack<Integer> instance;
/** initialize your data structure here. */
public MinStack() {
instance = new Stack<>();
list = new ArrayList<>();
}

public void push(int x) {
instance.push(x);
Collections.sort(list);
}

public void pop() {
int tmp = instance.pop();
list.remove((Object)tmp);
}

public int top() {
return instance.peek();
}

public int getMin() {
return list.get(0);
}
}
``````