leetcode -155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
public class MinStack {
private Stack<Integer> inStack;
private Stack<Integer> minStack;
public MinStack() {
inStack = new Stack<>();
minStack = new Stack<>();
}
/**
* 进栈 每个元素进栈都获取当前栈中最小值存入minStack中
*
* @param x
*/
public void push(int x) {
inStack.push(x);
if (!minStack.empty() && minStack.peek() > x) {
minStack.push(x);
}
if (!minStack.empty() && minStack.peek() <= x) {
minStack.push(minStack.peek());
}
if (minStack.empty()) {
minStack.push(x);
}
}
/**
* 出栈
*/
public int pop() {
if (!inStack.isEmpty()) {
minStack.pop();
return inStack.pop();
}
return -1;
}
/**
* 返回栈顶元素
*
* @return
*/
public int top() {
if (!inStack.isEmpty()) {
return inStack.peek();
}
return -1;
}
/**
* 返回最小值
*
* @return
*/
public int getMin() {
if (!minStack.isEmpty()) {
return minStack.peek();
}
return -1;
}
}