Python 中最近通话次数
假设我们想要编写一个名为 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 - 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
广告