原文:http://blog.csdn.net/sheepmu/article/details/38459165

实现O(1)获取最大最小值的栈和队列----java

一.如何实现包含获取最小值函数的栈

问题:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的getMin函数。在该栈中,调用getMin、push及pop的时间复杂度都是O(1).

最小值思路:用一个辅助栈stack2记住每次入栈stack1的当前最小值:在stack1入栈时,往stack2中加入当前最小值;stack1元素出栈时,stack2也出栈一个元素。最小值从stack2中获取及栈顶元素。O(1)

最大值思路:同上O(1)

中间值思路:对栈排序,取中间值,但是时间不是O(1)

  1. package com.sheepmu;
  2. import java.util.Arrays;
  3. import java.util.Stack;
  4. public class SpecialStack<E extends Comparable<E>>
  5. {
  6. Stack<E> stack1=new Stack<E>();
  7. Stack<E> stackMin=new Stack<E>();//存放求最小值的栈
  8. Stack<E> stackMax=new Stack<E>();//存放求最大值的栈
  9. public void push(E e)
  10. {
  11. stack1.push(e);
  12. if(stackMin.isEmpty()||e.compareTo(stackMin.peek())<0)
  13. stackMin.push(e);//若最小栈为空push进stack时就同时把它push进stackMin;
  14. else if(e.compareTo(stackMin.peek())>0)
  15. stackMin.push(stackMin.peek());
  16. if(stackMax.isEmpty()||e.compareTo(stackMin.peek())>0)
  17. stackMax.push(e);
  18. else if(e.compareTo(stackMax.peek())<0)
  19. stackMin.push(stackMax.peek());
  20. }
  21. public E pop()//一定要记着,非空才能pop()
  22. {
  23. if(!stack1.isEmpty()&&!stackMin.isEmpty()&&!stackMax.isEmpty())
  24. {
  25. E e=stack1.pop();
  26. stackMin.pop();
  27. stackMax.pop();
  28. return e;
  29. }
  30. else
  31. {
  32. System.out.println("栈已经为空了");
  33. return null;
  34. }
  35. }
  36. public E getMin()
  37. {
  38. return  stackMin.peek();
  39. }
  40. public E getMax()
  41. {
  42. return stackMax.peek();
  43. }
  44. public E getMed()
  45. {
  46. E[] ss=stack1.toArray(new E[stack.size()]);//stack1.toArray()返回的是Object[],  栈----->数组;不能toArray后再强制转换,会报错
  47. Arrays.sort(ss);
  48. return ss[ss.length/2];
  49. }
  50. }

实现O(1)获取最大最小值的栈----java的更多相关文章

  1. 设计一个Stack,要求Push、Pop、获取最大最小值时间复杂度都为O(1)

    面试的时候,面试官让设计一个栈,要求有Push.Pop和获取最大最小值的操作,并且所有的操作都能够在O(1)的时间复杂度完成. 当时真没啥思路,后来在网上查了一下,恍然大悟,只能恨自己见识短浅.思路不 ...

  2. JavaScript获取数组最小值和最大值的方法

    本文实例讲述了JavaScript获取数组最小值和最大值的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 var arr = new Array(); arr[0] = 100; ...

  3. paip.获取文件名从路径uapi java python php总结...

    paip.获取文件名从路径uapi java python php总结... =====uapi basename_noext($fname); =============java  自己写.. St ...

  4. 20155301-滕树晨 第二次随笔作业--从现有技能获取的经验应用于JAVA中

    第二次随笔--从现有技能获取的经验应用于JAVA中 你有什么技能比大多人(超过90%以上)更好? 这个想了半天,有一个是我乒乓球还是比较擅长的,在学校里可能比百分之90的人要强,在外面肯定是不如了.再 ...

  5. 两个栈实现队列+两个队列实现栈----java

                                               两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...

  6. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

  7. Java虚拟机栈(java stack)

    虚拟机栈(java stack) 百度图片搜索里的动图搜索功能不错,可以搜索一些动图,展示操作数栈的操作过程,比较形象.这点google差点意思 虚拟机栈(jvm stacks)是线程独占的 里面是多 ...

  8. C# 之 将string数组转换到int数组并获取最大最小值

    1.string 数组转换到 int 数组 " }; int[] output = Array.ConvertAll<string, int>(input, delegate(s ...

  9. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

随机推荐

  1. Jquery 遍历表单 AJAX提交

    function test(){ var arrayObj = new Array(); $("#contentTable tbody tr").each(function(){ ...

  2. 用pdo实现的织梦后台留言板

    <?php //ini_set("display_errors", "On"); include("data/common.inc.php&qu ...

  3. Apache Spark shell的实例操作

    1.scala> val inFile = sc.textFile("./spam.data") 作用是将spam.data当作文本文件加载到Spark中,将spam.dat ...

  4. 制作炫酷banner js插件,revolution

    这是一款非常强大的内容切换插件,它基于jQuery,它充分响应,支持移动设备,支持手机触摸,键盘翻页:它内置幻灯.视频播放计时器,它拥有各种模式:自定义,自动响应,全屏:它有多种动画效果.3d效果.. ...

  5. python 加密解密

    1. 使用base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1) print s1, s2 结果 1 2 ...

  6. .NET/C#- EPPLUS DEMO

    强大的导出EXCEL,比NPOI更好用,更强大,可惜只有4.0版本的. 记录一下DEMO var sheet = p.Workbook.Worksheets.Add("My Sheet&qu ...

  7. Android Service服务

    Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互.    服务不能自己运行,需要通过调用Context.startService ...

  8. WPF中的DependencyProperty存储方式详解

    前言 接触WPF有一段时间了,之前虽然也经常使用,但是对于DependencyProperty一直处于一知半解的状态.今天花了整整一下午将这个概念梳理了一下,自觉对这个概念有了较为清晰的认识,之前很多 ...

  9. JQuery 的bind和unbind函数

    测试:页面代码:<body>     <input type="button" name="aaa" value="点击我" ...

  10. log4net使用简明教程

    转自: http://www.cnblogs.com/songhaipeng/p/3343606.html http://www.cnblogs.com/TianFang/archive/2013/0 ...