问题:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
方法:
1.创建两个栈:一个stack,一个minstack(专门存放每次有新数组输入后的栈中最小值)。
2.push(x)将元素 x 推入栈中:分两步。先把元素推入stack中。若此时minstack中为空则,将此元素也放入minstack中;若minstack不为空,则元素要与minstack栈顶元素比较,小于或等于时放入minstack中,这样保证minstack的栈顶永远存放的是数列最小值。数等于的时候若不往里放,那第一个-2被删除的话,minstack中就空了。
3.top() 获取栈顶元素:stack.peek直接获取
4.getMin()检索栈中的最小元素:minstack.peek直接获取
代码:
class MinStack {
private Stack<Integer>stack =new Stack<>();
private Stack<Integer>minstack =new Stack<>();
public MinStack() {
}
//输入元素
public void push(int val) {
stack.push(val);
if(minstack.empty()){
minstack.push(val);
}else{
int x=minstack.peek();
if(val<=x){
minstack.push(val);
}
}
}
//删除栈顶元素
public void pop() {
int x=stack.pop();
if(x==minstack.peek()){
minstack.pop();
}
}
//获取栈顶元素
public int top() {
return stack.peek();
}
//获取栈中最小元素
public int getMin() {
return minstack.peek();
}
}