假设我们要编写一个名为LatestCounter的类来计算最近的请求。此类只有一个方法:ping(t),其中t表示某个时间(以毫秒为单位)。这将返回从3000毫秒前到现在的ping次数。时间[t-3000,t]中的任何ping都将计数,包括当前ping。并且可以保证每次对ping的调用都严格使用比以前更大的t值。
因此,如果输入类似于四次调用ping(1),ping(100),ping(3001),ping(3002),则输出将分别为1,2,3,3。
为了解决这个问题,我们将遵循以下步骤-
通过创建一个队列来初始化类,最初它是空的
定义一个功能ping()
。这将花费
当队列的大小不为0且t-queue [0]> 3000时,执行
从队列中删除第一个元素
在队列末尾插入t
返回队列大小
让我们看下面的实现以更好地理解-
class RecentCounter: def __init__(self): self.queue = [] def ping(self, t): while len(self.queue) and t - self.queue[0] > 3000: self.queue.pop(0) self.queue.append(t) return len(self.queue) ob = RecentCounter()print(ob.ping(1)) print(ob.ping(100)) print(ob.ping(3001)) print(ob.ping(3002))
ob.ping(1) ob.ping(100) ob.ping(3001) ob.ping(3002)
输出结果
1 2 3 3