一、什么是队列
单端队列:一端入队,一端出队
双端队列:两个口都可以进出
先进先出
二、常用操作
1.原理
访问 access:遍历查找某个元素
时间复杂度:O(N)
搜索 search:遍历查找某个元素
时间复杂度:O(N)
插入 insert:只能在队尾插入
时间复杂度:O(1)
删除 delete:只能删除队头
时间复杂度:O(1)
2.实现
#创建
a=deque()
#添加元素
a.append(1)
a.append(2)
a.append(3)
#先进先出
#获取即将出队的元素 队头
a[0]
#先进先出
#删除即将出队的元素 最左,并返回
temp= a.popleft()
#判断是否为空(size=0)
print(len(a)==0)
#遍历
#边删除,边遍历
while len(a)!=0:
temp1=a.popleft()
Leetcode练习
346. 数据流中的移动平均值
给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算其所有整数的移动平均值。
实现 MovingAverage
类:
MovingAverage(int size)
用窗口大小size
初始化对象。double next(int val)
计算并返回数据流中最后size
个值的移动平均值。
class MovingAverage(object):
def __init__(self, size):
"""
:type size: int
"""
self.q=collections.deque()
self.size=size
self.sizesum=0.0
self.len=0
def next(self, val):
"""
:type val: int
:rtype: float
"""
self.q.append(val)
self.sizesum+=val
self.len+=1
if self.len>self.size:
self.sizesum-=self.q.popleft()
self.len-=1
return self.sizesum/self.len
# Your MovingAverage object will be instantiated and called as such:
# obj = MovingAverage(size)
# param_1 = obj.next(val)
其他相关Leetcode习题:933,239
参考:手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结