一、思路
实现一个最小栈,要求能够常数时间内获得栈的最小值,并且支持栈的基本操作(入栈、出栈、获得栈顶元素)。以栈的特性来讲,要实现最小栈,必须要两个栈才可以。
这两个栈分别是stack,和minStack。
每次存数据的时候,先放入stack里面。
入栈:放数据的时候,对于minStack,第一次放数据,肯定会放进去。如果不是第一次,则每次把入栈的元素和minStack的栈顶元素进行比较,如果入栈元素比栈顶小,那么就可以放进minStack里。
出栈:需要判断出stack栈的数据,在minStack当中,是否存在,需要和栈顶元素进行比较。如果一样,都要出。
二、代码
import java.util.Stack;
//最小栈的实现
public class MinStack{
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack(){
this.stack=new Stack<>();
this.minStack=new Stack<>();
}
public void push(int x){
stack.push(x);
if(minStack.empty()){
minStack.push(x);
}else{
int tmp=minStack.peek();
if(x<=tmp){
minStack.push(x);
}
}
}
public void pop(){
if(!stack.empty()){
int tmp=stack.pop();
if(tmp==minStack.peek()){
minStack.pop();
}
}
}
public int top(){
if(stack.empty()){
return -1;
}
return stack.peek();
}
public int getMin(){
return minStack.peek();
}
}