package stack;
/**
* 找出栈中最小的元素
* 先定义一个辅助栈,栈顶永远存最小的元素。如原栈中添加元素比辅助栈顶元素大,辅助栈的栈顶元素复制一遍
* 放到辅助栈中,如果小,则直接放到辅助栈中。
*/
import java.util.Stack;
public class MinStack {
private Stack<Integer> stack=new Stack<Integer>();
private Stack<Integer> minStack=new Stack<Integer>();
public void push(int data){
stack.push(data);
if(minStack.size()==0 || minStack.peek()>data)
minStack.add(data);
else{
int date=minStack.peek();
minStack.add(date);//核心代码,peek返回的是栈顶代码
System.out.println("peek="+date+":minsize="+minStack.size());
}
}
public int pop() throws Exception{
if(stack.size()==0)
throw new Exception("栈中空了");
int data=stack.pop();
System.out.println("data="+data);
int mindata=minStack.pop();//核心代码,原栈出,辅助栈也出。
System.out.println("mindata="+mindata);
return data;
}
public Object min() throws Exception{
if(minStack.size()==0)
throw new Exception("栈中空了");
return minStack.peek();
}
public static void main(String[] args) throws Exception {
MinStack minstack=new MinStack();
minstack.push(5);
minstack.push(7);
minstack.push(3);
minstack.push(4);
System.out.println(minstack.pop());
System.out.println(minstack.pop());
System.out.println("min="+minstack.min());
}
}
相关文章
- C语言 定义一个整型二维数组,存放一个5×5的矩阵,要求从键盘输入矩阵的值,找出主对角线上其值最大的元素。主对角线如示例中1-4-9-16-25
- java如何取出list的最后一个值,如何从Java中的ArrayList获取第一个和最后一个元素?...
- 将一个list中的元素的某一属性取出来单独放到一个list/map里面
- 获取集合list中对象的某个属性的最大值最小值平均值以及筛选
- css中如何解决绝对定位元素被遮挡的问题
- 实例15 输出三个数中的最大值和最小值
- python列表求最小值索引,在Python中查找給定數組中的最小值索引
- 从map中取出最大或最小value值对应的key值
- 获取Map中Value(值)的最小值和最大值
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标