[算法学习]栈中的最小值
2016-02-18 13:51
141 查看
问题描述: 实现栈的pop、push、 min (得到栈中最小值)方法。
解法与分析:
1. 由于每次压栈和出栈都可能会改变栈中的最小值,所以,我们增加一个存放最小值的栈。
2. 当出栈操作时,最小值的栈也出栈;(当然,必须判断栈是否为空)
3. 当压栈操作时,比较压栈元素值和最小栈的栈顶元素的大小,若比较小,则将它压入栈中,若不是,则将最小栈的栈顶元素重复压栈。(当然,必须判断栈是否为空)
附:源码地址
解法与分析:
1. 由于每次压栈和出栈都可能会改变栈中的最小值,所以,我们增加一个存放最小值的栈。
2. 当出栈操作时,最小值的栈也出栈;(当然,必须判断栈是否为空)
3. 当压栈操作时,比较压栈元素值和最小栈的栈顶元素的大小,若比较小,则将它压入栈中,若不是,则将最小栈的栈顶元素重复压栈。(当然,必须判断栈是否为空)
参考代码如下
[code] private Stack<Integer> dataStack = new Stack<Integer>(); private Stack<Integer> minStack = new Stack<Integer>(); /** * 出栈 * @return */ public int pop() { if (minStack.isEmpty() && dataStack.isEmpty()) { throw new EmptyStackException(); } minStack.pop(); return dataStack.pop(); } /** * 压栈 * @param item */ public void push(int item) { dataStack.push(item); if(minStack.isEmpty()||item<minStack.peek()) { minStack.push(item); } else { minStack.push(minStack.peek()); } } /** * 取最小值 * @return */ public int min() { if(minStack.isEmpty()) { throw new EmptyStackException(); } return minStack.peek(); }
附:源码地址
相关文章推荐
- Java开发中的23种设计模式详解(转)
- CnetOS7 ifconfig command not found
- 关于重载函数的一些学习
- CFF前端沙龙总结
- 远程连接命令
- MySQL数据库最大连接数的修改
- Java线程(九):Condition-线程通信更高效的方式
- nginx
- shell脚本个人总结
- [BZOJ3631] [JLOI2014] 松鼠的新家
- 2、修改MyEclipse中生成的模板servlet的方法
- [算法学习]栈的出栈序列
- 关于c++虚函数及访问基类私有函数的实践及一些疑问
- Mac 录制视频,并转为GIF格式
- 《活着》(作者:余华) 读后感
- Xcode 如何设置 自动内存管理 转换为 手动内存管理
- js数组去重
- PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
- django创建数据表同步
- 属性动画和视图动画