/**
* 实现一个特殊的栈,在基本功能上实现返回栈中最小元素的功能
* 1.push,pop,getMin的时间复杂度为O(1)
* 2.可以使用现有的栈结构
* 操作:
* 使用两个栈,一个最小栈,一个数据栈
*/
public class TheMinNumberInStack {
private final Stack<Integer> dataStack;
private final Stack<Integer> minStack;
public TheMinNumberInStack() {
this.dataStack = new Stack<>();
this.minStack = new Stack<>();
}
public static void main(String[] args) {
TheMinNumberInStack stack = new TheMinNumberInStack();
stack.push(5);
stack.push(3);
stack.push(7);
System.out.println(stack.getMin());
stack.pop();
System.out.println(stack.getMin());
stack.pop();
}
public void push(int val){
if(dataStack.empty() && minStack.empty()){
minStack.push(val);
}else{
if(val <= minStack.peek()){
minStack.push(val);
}else{
minStack.push(minStack.peek());
}
}
dataStack.push(val);
}
public int pop(){
if(dataStack.empty()){
throw new RuntimeException("栈已经为空");
}
minStack.pop();
return dataStack.pop();
}
/*获取当前栈中最小的元素*/
public int getMin(){
if(minStack.empty()){
throw new RuntimeException("栈已经为空");
}
return minStack.peek();
}
}
左神算法学习