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

相关文章