剑指OFFER----59-2、队列的最大值(js实现)

题目


思路

  • 单调队列

代码

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

var MaxQueue = function () {
  this.queue = []
  this.maxQueue = []
}

/**
 * @return {number}
 */
MaxQueue.prototype.max_value = function () {
  if (this.maxQueue.length) return this.maxQueue[0]
  return -1
}

/**
 * @param {number} value
 * @return {void}
 */
MaxQueue.prototype.push_back = function (value) {
  while (this.maxQueue.length && this.maxQueue[this.maxQueue.length - 1] < value) {
    this.maxQueue.pop()
  }
  this.maxQueue.push(value)
  this.queue.push(value)
}

/**
 * @return {number}
 */
MaxQueue.prototype.pop_front = function () {
  if (!this.queue.length) return -1
  const s = this.queue.shift()
  if (this.maxQueue.length && s === this.maxQueue[0]) {
    this.maxQueue.shift()
  }
  return s
}

/**
 * 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()
 */

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值