Python最近的通话次数

假设我们要编写一个名为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