9.3栈和队列(三)——设计一个栈,出pop与push方法,还支持 min方法,可返回栈元素中的最小值
2015-08-04 15:22
357 查看
[align=left]/**[/align]
* 功能:设计一个栈,出pop与push方法,还支持
min方法,可返回栈元素中的最小值。三个方法的时间复杂度必须为O(1)。
[align=left] */[/align]
[align=left]两种方法:[/align]
[align=left]方法一:[/align]
方法二:
* 功能:设计一个栈,出pop与push方法,还支持
min方法,可返回栈元素中的最小值。三个方法的时间复杂度必须为O(1)。
[align=left] */[/align]
[align=left]两种方法:[/align]
[align=left]方法一:[/align]
/** * 思路:每个结点记录当前最小值。 * 缺点:当栈很大时,每个元素都要记录 min,就会浪费大量空间。 */ public class StackWithMin extends Stack<NodeWithMin>{ public static void main(String[] args) { // TODO Auto-generated method stub } public void push(int value){ int newMin=Math. min(value , min()); super.push( new NodeWithMin( value, newMin)); } public int min(){ if( this.isEmpty()) return Integer. MAX_VALUE; else return peek(). min; } } class NodeWithMin{ public int value; public int min; public NodeWithMin( int value, int min){ this. value= value; this. min= min; } }
方法二:
/** * 思路:利用额外的栈来记录 min */ public class StackWithMin2 extends Stack<Integer>{ public static void main(String[] args) { // TODO Auto-generated method stub } //s2是存放最小值的栈 Stack<Integer> sMin; public StackWithMin2(){ sMin= new Stack<Integer>(); } public void push(int value){ if( value<=min()) sMin.push( value); //调用自身Stack的Push方法,而不是StackWithMin2的方法(sMin是Stack类) super.push( value); } public Integer pop(){ int value= super.pop(); if( value==min()) sMin.pop(); return value; } public int min(){ if( sMin.isEmpty()) return Integer. MAX_VALUE; return sMin.peek(); } }
相关文章推荐
- linux下使用C++ Json库
- .NET中AOP的几种实现方案
- 每天一个linux命令:crontab命令
- 如何统计id很复杂的fasta文件的长度?
- operator.itemgetter的用法【转】
- [转]Todd.log - a place to keep my thoughts on programming 分布式架构中的幂等性
- 构建 openwrt 交叉编译工具链
- 工作常用shell集合
- 源码安装LAMP环境
- heartbeat实现Nginx高可用
- 如何更新远程主机上的 Linux 内核
- openstack相关
- Linux tmpfs的使用问题解析
- "Tomcat+Spring+Quartz"解决方案下,关闭Tomcat出现"线程未关闭,出现内存泄漏"错误
- CentOS 6.x 下安装配置 gvim
- 搭建 lamp环境【apache2.4.12 + php5.5.12 + mysql5.6.13】
- OpenGL 矩阵变换(讲的太好了~!)
- OpenGL笔记之矩阵变换(Matrix Transformation)
- Parallel Stop与Break的理解
- -Dmaven.multiModuleProjectDirectory system propery is not set.