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());
}
}
相关文章
- 算法探索_删除排序链表中的重复元素
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
- [华为机试练习题]43.在字符串中找出连续最长的数字串
- 【LeeCode】28. 找出字符串中第一个匹配项的下标
- Spring事务(Transaction)管理高级篇一栈式解决开发中遇到的事务问题
- 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:
- LintCode-159.寻找旋转排序数组中的最小值
- lintcode-160-寻找旋转排序数组中的最小值 II
- 【LeetCode】Find Minimum in Rotated Sorted Array 找到旋转后有序数组中的最小值
- LeetCode-83. 删除排序链表中的重复元素(java)