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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP