实现一个特殊的栈,在实现栈的基本功能上,实现返回栈中的最小元素的操作。
思路:我们用两个栈,一个栈用来存放数据,另外一个栈(help)用来存放最小的元素。当我们新加进去的元素小于等于help栈中最上面的元素的时候,我们就将这个元素也放入到help栈中,当需要返回最小元素的时候就返回help栈中栈顶的元素。
package lianxi03;
import java.util.Stack;
public class Code03_getMinStack {
public static void main(String[] args) {
GetMinStack s=new GetMinStack();
s.add(9);
s.add(1);
s.add(6);
s.add(1);
s.pop();
System.out.println(s.getMin());
}
public static class GetMinStack{
private Stack<Integer> stack;
private Stack<Integer> help;
public GetMinStack(){
stack=new Stack<>();
help=new Stack<>();
}
public void add(int num){
//如果开始还没有元素的时候直接加入到help中去不用进行判断
if(help.size()==0){
stack.add(num);
help.add(num);
}else if(help.peek()>=num){//等于的也要是因为如果不存进去的话,当等于的这个数弹出去的时候help栈就没有这个数字了,这时候返回的数字就不是最小的了。
help.add(num);
stack.add(num);
}
}
public Integer pop(){
if(stack.isEmpty())throw new RuntimeException("The stack is empty");
int num=stack.pop();
if(help.peek()==num)
help.pop();
return num;
}
public Integer getMin(){
if(help.size()==0)return null;
return help.peek();
}
}
}