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 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.