单调队列是一个特殊的队列,除满足队列先进先出的特点外,队列内的元素根据需要,还满足单调递增或单调递减。
以单调递增队列为例:当我们想队尾添加元素x时,为了保持单调性,要把当前队尾所有小于x 的元素从队列中移出,直到队列为空,或是找到了比x 大的元素。这样,单调队列头部始终保存的是当前队列内的最大值。
当我们在队列内移除元素时,若当前移除的元素与单调队列头部元素相等,说明此时此最大值在队列内已不存在,此元素也应被移除以维护队列内的最大值。
例题

代码示例
在这里,我们用一个数组(双向队列)self.que 保存所有的队列元素,self.max_ 保存遇到的最大值。
1 | class MaxQueue: |