https://leetcode.com/problems/min-stack/description/?envType=study-plan-v2&envId=top-interview-150
class MinStack {
List<Integer> stack;
List<Integer> minStack;
int minValue;
public MinStack() {
stack = new ArrayList<>();
minStack = new ArrayList<>();
minValue = Integer.MAX_VALUE;
}
public void push(int val) {
if (val < minValue) {
minValue = val;
}
stack.add(val);
minStack.add(minValue);
}
public void pop() {
stack.remove(stack.size() - 1);
int temp = minStack.remove(minStack.size() - 1);
if (temp == minValue) {
minValue = minStack.isEmpty() ? Integer.MAX_VALUE : getMin();
}
}
public int top() {
return stack.get(stack.size() - 1);
}
public int getMin() {
return minStack.get(minStack.size() - 1);
}
}