被leetcode吊打第十一天,239. 滑动窗口最大值
该题我们可以使用单调队列,即单调递减或单调递增的队列。与优先级队列不同处在于:如何维护元素里的单调增和单调减(也就是说这个队列其实是我们diy出来的)
针对不同的题目单调队列的处理也不同。
在该题中,我们的单调队列(单调减的)只需要维护可能成为最大值的元素(不需要维护整个窗口)。也就是让出口处始终为滑动窗口当前的最大值元素。
pop(value):如果窗口移除的元素value等于单调队列的出口元素(也就是此时窗口的最大值),那么队列弹出元素,否则不用任何操作(因为其他元素已经在push的时候被我们移出队列了)
push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止
而我们要push、shift的value,就是滑动窗口移动的过程中,nums应该加入、移出滑动窗口的元素。
展开
评论