leetcode-Queue

leetcode-Queue
Tony Cao队列
用队列表栈
1 | class MyStack: |
单调队列
单调队列:队列中元素之间的关系具有单调性,而且队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。
单调队列和单调栈的区别:
队列可以从队列头弹出元素,可以方便地根据入队的时间顺序(访问的顺序)删除元素。这样导致了单调队列和单调栈维护的区间不同。
当访问到第i个元素时,单调栈维护的区间为[0, i),而单调队列维护的区间为(lastpop, i)
单调队列可以访问“头部”和“尾部”,而单调栈只能访问栈顶(也就是“尾部”)。这导致单调栈无法获取[0, i)的区间最大值/最小值。
综上所述,单调队列实际上是单调栈的的升级版。单调栈只支持访问尾部,而单调队列两端都可以
算法流程:
初始化: 双端队列 deque ,结果列表 res ,数组长度 n ;
滑动窗口: 左边界范围 i∈[1−k,n−k] ,右边界范围 j∈[0,n−1] ;
若 i>0 且 队首元素 deque[0] = 被删除元素 nums[i−1] :则队首元素出队;
删除 deque 内所有 <nums[j] 的元素,以保持 deque 递减;
将 nums[j] 添加至 deque 尾部;
若已形成窗口(即 i≥0 ):将窗口最大值(即队首元素 deque[0] )添加至列表 res ;
返回值: 返回结果列表 res ;
1 | # importing "collections" for deque operations |




