剑指 Offer 59 - II. 队列的最大值

661 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

Leetcodeleetcode.cn/problems/du…

GitHub : github.com/nateshao/le…

剑指 Offer 59 - II. 队列的最大值

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

思路:两个队列

这个题和两个队列实现栈思路差不多

Go

 type MaxQueue struct {
     q1 []int
     max []int
 }
 ​
 func Constructor() MaxQueue {
     return MaxQueue{
         make([]int,0),
         make([]int,0),
     }
 }
 ​
 func (this *MaxQueue) Max_value() int {
     if len(this.max) == 0{
         return -1
     }
     return this.max[0]
 }
 ​
 func (this *MaxQueue) Push_back(value int)  {
     this.q1 = append(this.q1,value)
     for len(this.max) != 0 && value > this.max[len(this.max)-1]{
         this.max = this.max[:len(this.max)-1]
     }
     this.max = append(this.max,value)
 }
 ​
 func (this *MaxQueue) Pop_front() int {
     n := -1
     if len(this.q1) != 0{
         n = this.q1[0]
         this.q1 = this.q1[1:]
         if this.max[0] == n{
             this.max = this.max[1:]
         }
     }
     return n
 }
 ​
 /**
  * Your MaxQueue object will be instantiated and called as such:
  * obj := Constructor();
  * param_1 := obj.Max_value();
  * obj.Push_back(value);
  * param_3 := obj.Pop_front();
  */