Python 中的最近调用次数
pythonserver side programmingprogramming
假设我们想编写一个名为"RecentCounter"的类来计算最近的请求。该类只有一个方法:ping(t),其中 t 表示某个时间(以毫秒为单位)。这将返回从 3000 毫秒前到现在进行的 ping 次数。任何时间在 [t - 3000, t] 内的 ping 都将被计算在内,包括当前 ping。并且保证每次调用 ping 时都会使用比之前更大的 t 值。
因此,如果输入类似于调用 ping 四次 ping(1)、ping(100)、ping(3001)、ping(3002),则输出将分别为 1、2、3、3。
为了解决这个问题,我们将遵循以下步骤 −
- 通过创建一个队列来初始化类,最初它是空的
- 定义一个函数 ping()。这将需要 t
- 当队列大小不为 0 且 t - 队列[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