算法--设计一个有getMin功能的栈
2015-09-23 15:43
323 查看
//本文代码出自 左程云 的《程序员代码面试指南》
/** 1.设计一个有getMin功能的栈 * 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 * 要求:pop、push、getMin操作的时间复杂度都是O(1). * 设计的栈类型可以使用现有的栈结构 * * 只保存当前最小值,空间少,但弹出时慢 */ public class MyStack1 { private Stack<Integer> stackData; private Stack<Integer> stackMin; //初始化 public MyStack1() { stackData=new Stack<Integer>(); stackMin=new Stack<Integer>(); } //压入 public void push(int newNum){ if(stackMin.isEmpty()||newNum<=this.getMin()){ stackMin.push(newNum); } stackData.push(newNum); } //弹出 public int pop(){ if(stackData.isEmpty()){ throw new RuntimeException("Your stack is empty!"); } int value =stackData.pop(); if(value==this.getMin()){ stackMin.pop(); } return value; } //得到当前最小值 public int getMin() { if(stackMin.isEmpty()){ throw new RuntimeException("Your stack is empty!"); } return stackMin.peek(); } }
/** 1.设计一个有getMin功能的栈 * 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 * 要求:pop、push、getMin操作的时间复杂度都是O(1). * 设计的栈类型可以使用现有的栈结构 * * 只保存当前最小值,空间多,但弹出时快 */ public class MyStack2 { private Stack<Integer> stackData; private Stack<Integer> stackMin; public MyStack2() { stackData=new Stack<Integer>(); stackMin=new Stack<Integer>(); } public void push(int newNum){ if(stackMin.isEmpty()){ stackMin.push(newNum); }else if (newNum<this.getMin()) { stackMin.push(newNum); }else { int value =stackMin.peek(); stackMin.push(value); } stackData.push(newNum); } public int pop(){ if(stackData.isEmpty()){ throw new RuntimeException("Your stack is empty!"); } stackMin.pop(); return stackData.pop(); } public int getMin(){ if(stackMin.isEmpty()){ throw new RuntimeException("Your stack is empty!"); } return stackMin.peek(); } }
相关文章推荐
- [算法]基于分区最近点算法的二维平面
- 十六进制转化成汉字
- ormapping框架和jdbc的比较
- 时间管理从用好今目标开始
- spring oauth2.0入门(实战)
- sql sever 2008修改数据类型
- C语言高速入口系列(七)
- Struts框架核心工作流程与原理
- GRE
- Android开发 MeasureSpec介绍
- 【TCO 2013 3A】TrichyInequality
- Robot Framework测试框架(学习)
- 数据结构面试题1.2.9-查找最小的K个元素-使用最大堆
- warning incompatible implicit declaration of built-in function 'printf'
- Android系统jar环境变量SYSTEMSERVERCLASSPATH
- 学习微博情感分类的特定情感词嵌入(A14, ACL2014)*
- 线段树入门
- C++ 实现可变参数
- 面试题29:数组中出现次数超过一半的数字
- JavaScript学习笔记之JS函数(一)