用两个栈实现最小栈
过程:
- 入栈时候,栈A用于保存数据,并和栈B中的元素进行比较:
如果入栈元 素小于栈B中的元素,将入栈元素进入栈B中
如果入栈元素大于栈B中的元素,peek()栈B中的元素进入栈B - 出栈时候,栈Apop()数据,栈B也一起pop数据
- 取最小值的时候,peek()栈B的元素就是当前栈的最小值
import java.util.Stack;
public class minStack {
// 用两个栈实现一个最小栈
Stack<Integer> stackA=new Stack<>();
Stack<Integer> stackB=new Stack<>();
//入栈时候,栈A正常存储,栈B存储最小值
//如果元素小于栈B中的元素,将元素存入栈B中
//如果元素大于栈B中的元素,将栈B中的元素重复保存
public void push(int node) {
stackA.push(node);
if(stackB.isEmpty()||node<stackB.peek()) {
stackB.push(node);
}else {
stackB.push(stackB.peek());
}
}
// 出栈的时候,保证栈定中的元素为最小值
// 栈A出栈,栈B就出栈
public void pop() {
if(stackA.isEmpty()) {
throw new RuntimeException();
}
stackA.pop();
stackB.pop();
}
// 获取最小值
// 栈B出栈,对应着栈A也出栈
public Integer getMin() {
if(stackB.isEmpty()) {
throw new RuntimeException();
}
return stackB.peek();
}
}