zoukankan      html  css  js  c++  java
  • 队列的最大值

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/12437319.html

    队列的最大值

    题目链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/comments/

    定义一个队列并实现函数 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]

    题解:

             题意:一开始题目都没有读懂,后来看了好多题解也没有说题目啥意思,最后看代码一点一点才明白题意,欣姐也给我找了一个题解才更加明白,题目给的示例中输入:给的示例第一列的函数和第二列的数值是对应的,比如题目给的第一个例子可以理解为以下步骤,这里是欣姐提供给我看的:

    MaxQueue” 生成队列

            [] 传入的值为空

            无输出,故输出为null

    2、 "push_back" 向队列传入元素

            [1] 传入的值为1

            此时队列中只有一个1

            函数无输出,故输出为null

    3、 "push_back" 向队列传入元素

            [2] 传入的值为2

            此时队列为 --进-> [2,1] --出->

            函数无输出,故输出为null

    4、 "max_value" 求队列中的最大值

            [] 传入的值为空

            输出为2

    5、 "pop_front" 删除队列头部元素

            [] 传入的值为空

            函数pop_front还要输出删除元素的值,故输出为1

    思路:我看的官方代码,官方用的暴力破解,直接找一个队列中的最大值,如果进队一个元素,则和最大值做比较,大于最大值,则把进入队列的值赋值给最大值,如果进队的值没有当前的最大值大,则不做任何操作。

    代码如下:

    class MaxQueue {
        LinkedList<Integer> queue;
        int maxValue;
        public MaxQueue() {
            queue = new LinkedList<>();
            maxValue = Integer.MIN_VALUE;
        }
        
        public int max_value() {
            if (queue.isEmpty())
                return -1;
            return maxValue;
        }
        
        public void push_back(int value) {
            queue.addLast(value);
            if (value > maxValue)
                maxValue = value;
        }
        
        public int pop_front() {
            if (queue.isEmpty())
                return -1;
            int firstNum = queue.removeFirst();
            if (firstNum == maxValue)
                getMax();
            return firstNum;
        }
    
        public void getMax() {
            maxValue = Integer.MIN_VALUE;
            for (int num:queue)
                maxValue = Math.max(maxValue, num);
        }
    }
  • 相关阅读:
    spring boot redis 使用代码配置 redis的连接信息
    mysql Last_SQL_Error
    mysql relay log
    idea插件开发
    全网唯一正常能用的centos7 安装mysql5.7.35 22 33 25
    LVM逻辑卷管理器
    git提交代码
    数据中心统一网络实战:FCoE部署指南
    详解HBA、NIC与CNA的区别
    存储网络 – 了解FCoE的八个技术细节
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12437319.html
Copyright © 2011-2022 走看看