设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
import java.util.Stack;
public class LeetCode155 {
static class MinStack{
//存储所有的数据
Stack<Integer> stack = new Stack<>();
//用来存储最小的数据
Stack<Integer> minStack = new Stack<>();
public void push(int val){
//数据正常入栈
stack.push(val);
//如果minStack不为空,就要比较一下要当前要入栈的数据val和minStack里的数据num,如果val比较小就把它压入栈中,如果minStack为空,直接入栈就行
if(!minStack.isEmpty()){
int num = minStack.peek();
if(val <= num){
minStack.push(val);
}
}else {
minStack.push(val);
}
}
public void pop(){
//出栈的时候,如果出栈的这个数,两个栈都有,就需要把它们都出栈了
int a = stack.peek();
int b = minStack.peek();
if (a == b){
stack.pop();
minStack.pop();
}else{
stack.pop();
}
}
public int top(){
//栈顶元素,直接从stack里取就行了
return stack.peek();
}
public int getMin(){
//最小元素从minStack直接取
return minStack.peek();
}
}
public static void main(String[] args) {
//测试代码
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
System.out.println(minStack.getMin());
minStack.pop();
System.out.println(minStack.getMin());
System.out.println(minStack.top());
}
}