何谓双端队列
双端队列是与队列相似的有序集合,他有一前一后两端,操作方面是队列与栈的结合,添加与移除均可在两端进行。
双端队列的python实现
我们需要设定一个对象来实现双端队列,双端队列的操作有以下几个:
Deque()创建一个空双端队列
addFront(item)将一个元素加入到前端
addRear(item)将一个元素加入到后端
removeFront()将前端的第一个元素删去,并且返回它的值
removeRear()将后端的第一个元素删去,并返回他的值
isEmpty()判断是否为空
size()返回双端队列的元素数目
代码如下
class Deque:
def __init__(self):
self.item = []
def isEmpty(self):
return self.item ==[]
def addFront(self, item):
self.item.append(item)
def addRear(self, item):
self.item.insert(0, item)
def removeFront(self):
return self.item.pop()
def removeRear(self):
return self.item.pop(0)
def size(self):
return len(self.item)
双端队列的简单应用
双端队列的应用方面就是回文检测器
回文是指从前往后与从后往前读都一样的字符串,我们可以依次从前后起初拿出一个字符串,看他们是否相同。
def palchecker(string):
chardeque = Deque()
for ch in string:
chardeque.addRear(ch)
stillEqual = True
while chardeque.size() > 1 and stillEqual:
first = chardeque.removeFront()
last = chardeque.removeRear()
if first != last:
stillEqual = False
return stillEqual
双端队列实战
在调用双端队列时我们常常用collections.deque()来引用
https://leetcode-cn.com/problems/design-circular-deque/
https://leetcode-cn.com/problems/sliding-window-maximum/