zoukankan      html  css  js  c++  java
  • 剑指 Offer 59

    题目:

    请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。

    若队列为空,pop_front 和 max_value 需要返回 -1

    示例 1:

    输入:
    [“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”]
    [[],[1],[2],[],[],[]]
    输出: [null,null,null,2,1,2]
    示例 2:

    输入:
    [“MaxQueue”,“pop_front”,“max_value”]
    [[],[],[]]
    输出: [null,-1,-1]

    限制:

    1 <= push_back,pop_front,max_value的总操作数 <= 10000
    1 <= value <= 10^5

    题解:

    在这里插入图片描述

    代码:

    //方法一:
    class MaxQueue {
        int[] q = new int[20000];
        int begin = 0, end = 0;
    
        public MaxQueue() {
    
        }
        
        public int max_value() {
            int ans = -1;
            for (int i = begin; i != end; ++i) {
                ans = Math.max(ans, q[i]);
            }
            return ans;
        }
        
        public void push_back(int value) {
            q[end++] = value;
        }
        
        public int pop_front() {
            if (begin == end) {
                return -1;
            }
            return q[begin++];
        }
    }
    
    
    //方法二
    class MaxQueue {
        Queue<Integer> q;
        Deque<Integer> d;
    
        public MaxQueue() {
            q = new LinkedList<Integer>();
            d = new LinkedList<Integer>();
        }
        
        public int max_value() {
            if (d.isEmpty()) {
                return -1;
            }
            return d.peekFirst();
        }
        
        public void push_back(int value) {
            while (!d.isEmpty() && d.peekLast() < value) {
                d.pollLast();
            }
            d.offerLast(value);
            q.offer(value);
        }
        
        public int pop_front() {
            if (q.isEmpty()) {
                return -1;
            }
            int ans = q.poll();
            if (ans == d.peekFirst()) {
                d.pollFirst();
            }
            return ans;
        }
    }
    
    
  • 相关阅读:
    9月9
    JavaScript语法(三)
    JavaScript语法(二)
    实现AJAX的基本步骤 。。转
    Ajax 完整教程。。转载
    Struts2中的Action类(解耦方式,耦合方式)
    web应用中使用JavaMail发送邮件 。。转载
    Struts2下的<result>中的type整理
    Struts2整理+课堂代码+注意事项
    一对多,多对一,注意事项总结
  • 原文地址:https://www.cnblogs.com/nmydt/p/14256379.html
Copyright © 2011-2022 走看看