包含min函数的栈
2016-05-28 16:54
253 查看
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数解法一:
思路:采用java中自带的迭代函数进行处理。
public class Solution{ /** * @param args */ Stack<Integer> stack = new Stack<Integer>(); public void push(int node) { stack.push(node); } public void pop() { stack.pop(); } public int top() { return stack.peek();//这里的top值是用.peek()函数,不要忘记了栈本身的内部函数 } public int min() { int min = stack.peek();//第一个数出栈 int tmp = 0; Iterator<Integer> iterator = stack.iterator();//迭代,以此出栈 while (iterator.hasNext()){ tmp = iterator.next(); if (min>tmp){ min = tmp; } } return min; } public static void main(String[] args)throws Exception { // TODO Auto-generated method stub min_stack ms=new min_stack(); ms.push(3); ms.push(2); ms.push(3); System.out.println(ms.min()); } }
解法二:
思路:用一个栈data保存数据,用另一个栈min保存以此入栈的最小数。如:data中以次入栈:5,4,3,8,9,10,111,12,1
则min中以次入栈:5,4,3,1
每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则不如栈。
public class Solution{ Stack<Integer> data = new Stack<Integer>(); Stack<Integer> min = new Stack<Integer>(); Integer temp=null; public void push(int node){ if(temp!=null){ if(node < temp){ min.push(node); temp = node;//temp保存的是最小值 } data.push(node); }else{ temp = node; data.push(node); min.push(node); } } public int pop(){ int num = data.pop(); int num2 = min.pop(); if(num != num2){//判断栈min中是否已经存在了 min.push(num2); } } public int top(){ int num = data.pop(); data.push(num); return num; } public int min(){ int num = min.pop(); min.push(num); return num; } }
解法三:
相关文章推荐
- 设置一个POJO的某个属性的默认值
- 字符串操作函数
- JAVA三大框架SSH的各自作用
- 对Map按key和value分别排序
- Oracle后台进程详解
- DIR - matlab函数
- 配置elasticsearch 以及ik分词
- 拿到腾讯实习offer的前后小事
- mappingResources,annotatedClasses(映射)
- [ZooKeeper]ZooKeeper的Watch事件类型
- BP算法推导
- Ajax的jsonp方式跨域获取数据的简单实例
- OpenCV坐标体系的初步
- HDU 1048 凯撒密码
- matlab—load命令读的数据为struct类型的数据的处理方法
- Filter过滤器高级应用
- EBS R12中SLA子分类帐与子模块的关联关系
- hdoj1097
- 如何让wireshark支持OpenFlow解析
- JavaMail直接发送邮件