coming
天行健 君子以自强不息
记录我的成长
单调队列是一种用来解决滑动窗口最大值的数据结构。考虑数组$\{a_n\}$与窗口长度k,窗口从左向右滑动,如何在O(n+k)的时间复杂度内得到所有这些窗口内的最大值。此时就会用到单调队列,队列的插入与删除规则如下:
记插入元素的值为val,插入之前删除队列中所有小于val的元素。
记删除元素的值为val,比较队头元素的值是否相等,若相等则删除队头元素。
单调队列的Python实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Mqueue(): def __init__(self, n=0): self.low, self.high=0, 0 if n==0: self._list=[] else: self._list=[0]*n def join(self, val): while self.low<self.high and self._list[self.high-1]<val: self.high-=1 if self.low==self.high: self.low, self.high=0, 0 if self.high==len(self._list): self._list.append(val) else: self._list[self.high]=val self.high+=1 def remove(self): retval=None if self.low<self.high: retval=self._list[self.low] self.low+=1 if self.low==self.high: self.low, self.high=0, 0 return retval
|
题目链接
滑动窗口最大值
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!