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

更新于: 2020-07-04

325 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告