• 【剑指Offer】队列的最大值


    题目链接:剑指Offer59 队列的最大值
    题目描述:

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

    题解:

    解题思路:
    1.定义MaxQueue数据结构,包含一个原始队列queue,一个单调递减队列maxQueue。
    2.进队。queue进队元素,maxQueue将小于当前元素的元素均删除,保持单调递减性。
    3.出队。queue正常出队,若当前出队元素等于maxQueue的最大值,则maxQueue出队。
    4.获取最大值。取maxQueue的第0个元素即为最大值。

    var MaxQueue = function() {
        this.orginQueue = [];    //原始队列
        this.maxQueue = [];     //单调递减队列
    
    };
    
    /**
     * @return {number}
     */
    MaxQueue.prototype.max_value = function() {
        return this.maxQueue.length? this.maxQueue[0] : -1;
    };
    
    /** 
     * @param {number} value
     * @return {void}
     */
    MaxQueue.prototype.push_back = function(value) {
        this.orginQueue.push(value);     //原始队列入队
        //维护单调队列的单调性,队尾开始遍历,遇到值比 value 小的就弹出
        while(this.maxQueue.length && this.maxQueue[this.maxQueue.length - 1] < value) {
            this.maxQueue.pop();
        }
        this.maxQueue.push(value);
    
    };
    
    /**
     * @return {number}
     */
    MaxQueue.prototype.pop_front = function() {
        if(!this.orginQueue.length)
            return -1;
        const val = this.orginQueue.shift();
        //同步单调队列与原始队列
        if(val === this.maxQueue[0])
            this.maxQueue.shift();
        return val;
    
    };
    
    /**
     * Your MaxQueue object will be instantiated and called as such:
     * var obj = new MaxQueue()
     * var param_1 = obj.max_value()
     * obj.push_back(value)
     * var param_3 = obj.pop_front()
     */
    
    
  • 相关阅读:
    Netbeans 注释模板配置
    你可能不知道的5 个强大的HTML5 API 函数
    科幻大片中那些牛X代码真相
    怎么才能成为一名PHP专家?
    网页设计中常见的错误列举
    五个必须警惕的数据库设计错误
    五种情况会导致Session 丢失
    四种策略防止用户将表单重复提交
    jQuery的deferred对象使用笔记
    [Web前端]由cookies安全说开去
  • 原文地址:https://www.cnblogs.com/ZigHello/p/16066468.html
Copyright © 2020-2023  润新知