面试题59_2:队列的最大值

定义一个队列,实现max方法得到队列中的最大值。

  • 要求入列、出列以及邱最大值的方法时间复杂度都是O(1)

private Deque<Integer> dataQueue = new LinkedList<>();
private Deque<Integer> maxQueue = new LinkedList<>();

    /**
     * 另外加一个保存最大值的队列
     * @param number
     */
    public void offer(int number) {
        dataQueue.offer(number);
        // 即将要存入的元素比当前队列最大值还大,存入该元素
        // 即将要存入的元素不超过当前队列最大值,再将最大值存入一次
        if (maxQueue.isEmpty() || number > maxQueue.peekFirst()) maxQueue.offerFirst(number);
        else maxQueue.offerFirst(maxQueue.peekFirst());

    }

    public void poll() {
        //!!!取队列和栈时,一定要最空值判断
       if (dataQueue.isEmpty()) throw new RuntimeException("队列为空!");
       if (maxQueue.peekFirst() == dataQueue.peekFirst()){
           maxQueue.pollFirst();
       }
       dataQueue.pollFirst();

    }

    public int max() {
        //空值判断!!!
       if (maxQueue.isEmpty()) throw new RuntimeException("队列为空!");
       return maxQueue.peekFirst();
    }
    public static void main(String[] args) {
        MaxQueue maxQueue = new MaxQueue();
        maxQueue.offer(2);
        maxQueue.offer(3);
        maxQueue.offer(4);
        maxQueue.offer(2);
        maxQueue.offer(6);
        maxQueue.offer(2);
        maxQueue.offer(5);
        maxQueue.offer(1);

        System.out.println(maxQueue.max());
        maxQueue.poll();
        maxQueue.poll();
        maxQueue.poll();
        maxQueue.poll();
        System.out.println(maxQueue.max());
        maxQueue.poll();
        System.out.println(maxQueue.max());
        maxQueue.poll();
        System.out.println(maxQueue.max());

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,294评论 0 16
  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 1,544评论 1 6
  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 3,062评论 4 20
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,100评论 0 4
  • 原创作者/山水平生 熟悉我的人都知道,在读初中前我没有出过山,跟原始部落里的小角色一样,成天就是上小学,放羊,做家...
    山水平生阅读 724评论 8 6