• 剑指 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;
        }
    }
    
    
  • 相关阅读:
    ubuntu14.04显卡驱动问题(amd5600k集显7650d)
    win7 ubuntu 14.04双系统安装
    func_num_args, func_get_arg, func_get-args 的区别与用法
    wamp2.5版本64位403forbidden问题
    mysql根据汉字拼音排序查询
    php判断浏览器语言
    php批量下载文件
    php搜索分页
    把ZenCart在线商店搭建到本地
    livezilla账号或密码修改方法
  • 原文地址:https://www.cnblogs.com/nmydt/p/14256379.html
Copyright © 2020-2023  润新知