面试题21 包含Min函数的栈
2016-06-14 11:55
274 查看
题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,请用mim,push,pop的时间复杂度都为O(1)
输入:
10,20,9
输出:
最小元素:9
解题思路:
如果仅仅用一个栈,那么当出栈的时候如果是最小元素,我们无法获得此小元素,因此,我们可以使用一个辅助栈,当我们插入一个元素的时候,让他和辅助栈的栈顶对比,如果小于辅助栈栈顶,也插入辅助栈,如果不是,辅助栈就插入辅助栈的栈顶元素。当出栈的时候,两个栈同时弹出。这样始终辅助栈的栈顶为最小元素。
Java代码实现:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,请用mim,push,pop的时间复杂度都为O(1)
输入:
10,20,9
输出:
最小元素:9
解题思路:
如果仅仅用一个栈,那么当出栈的时候如果是最小元素,我们无法获得此小元素,因此,我们可以使用一个辅助栈,当我们插入一个元素的时候,让他和辅助栈的栈顶对比,如果小于辅助栈栈顶,也插入辅助栈,如果不是,辅助栈就插入辅助栈的栈顶元素。当出栈的时候,两个栈同时弹出。这样始终辅助栈的栈顶为最小元素。
Java代码实现:
public class Stacks { <span style="white-space:pre"> </span>//主栈和辅助栈 public static Stack<Integer> dataStack=new Stack<Integer>(); public static Stack<Integer> minStack=new Stack<Integer>(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub push(10); push(20); push(9); pop(); System.out.println(min()); } private static void push(int data){ dataStack.push(data); if(minStack.size()==0 ||minStack.lastElement()>data){ minStack.push(data); }else{ minStack.push(minStack.lastElement()); } } private static void pop(){ if(dataStack.size()>0 && minStack.size()>0){ dataStack.pop(); minStack.pop(); } } private static int min(){ if(dataStack.size()>0 && minStack.size()>0){ return minStack.lastElement(); } return -1; } }
相关文章推荐
- 非技术相关的面试技巧(文章内容来自他人博客)
- 升级您的ERP系统
- 写给嵌入式程序员的循环冗余校验(CRC)算法入门引导
- Android面试题(文章内容来自他人博客)
- 与WWDC大会同步,黑马程序员iOS4.0课程震撼出炉
- Java笔试面试题整理第八波
- 面试题47-2:不使用新的变量,交换两个变量的值
- 面试题47:不用加减乘除做加法
- 程序员面试50题(1)—查找最小的k个元素[算法]
- 运维面试题和答案
- 求职前夕的不眠夜
- 大数相加 面试题
- 面试题19 二叉树的镜像
- 单链表面试题系列之约瑟夫环
- 面试题18 树的子结构
- 六招让员工职业发展体系落地并发挥价值
- 写给即将步入职场的自己
- 软件测试必须要知道十个关键点
- 程序员的心理修养----->生活篇
- Java程序员的日常 —— 响应式导航Demo