剑指Offer——II. 队列的最大值(JS实现)

简介: 剑指Offer——II. 队列的最大值(JS实现)

题目描述

image.png

解题思路

  • 本题采用的是模拟队列的思想
  • 难点:在于push的时候,要确保模拟队列中保持一个降序的顺序,头部始终是最大值,新加入的value放到最后面,所有比value小的pop掉
  • 最后返回模拟队列的头元素,就是最大值

解题代码(模拟队列)

var MaxQueue = function() {
    this.queue = [];
    this.stack = [];
};
MaxQueue.prototype.max_value = function() {
    if (this.stack.length !== 0) {
        return this.stack[0]
    } else {
        return -1;
    }
};
// ! 解题关键:模拟队列的首元素得是最大值
MaxQueue.prototype.push_back = function(value) {
    this.queue.push(value);
    if (this.stack.length === 0) {
        this.stack.push(value)
    } else {
        // 本题易错点:在下面这段代码,原因在于我们不仅要保证头元素是最大值,还要保证如果一旦头元素被pop之后,第二个元素也是相对于其他元素来说是最大的
        // while循环确保stack中全是比value大的,然后把value放到最后,这样就形成了一个降序排列
        while (this.stack[this.stack.length - 1] < value) {
            this.stack.pop();
        }
        this.stack.push(value);
    }
};
MaxQueue.prototype.pop_front = function() {
    if (this.queue.length !== 0) {
        if (this.queue[0] === this.stack[0]) {
            this.stack.shift();
        }
        return this.queue.shift();
    } else {
        return -1;
    }
};

总结(本题给我们的启示思路)

  • 启示一:学会使用模拟队列
  • 启示二:模拟队列如何确保一个降序排列,且新加入的value要放在最后
相关文章
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
4050 0
|
JavaScript 前端开发
js事件队列
js事件队列
235 55
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
210 6
|
JavaScript 前端开发
JavaScript——一个简单的队列Demo
JavaScript——一个简单的队列Demo
119 4
|
JavaScript 前端开发
js事件队列
js事件队列
79 0
|
JavaScript
数据结构(用 JS 实现栈和队列【三种方式】)
数据结构(用 JS 实现栈和队列【三种方式】)
230 0
|
前端开发 JavaScript 算法
JavaScript 中实现常见数据结构:栈、队列与树
JavaScript 中实现常见数据结构:栈、队列与树
301 0
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)