更多精彩內(nèi)容,請關(guān)注【力扣簡單題】。
題目
難度:★☆☆☆☆
類型:隊列
寫一個 RecentCounter 類來計算最近的請求。
它只有一個方法:ping(int t),其中 t 代表以毫秒為單位的某個時間。
返回從 3000 毫秒前到現(xiàn)在的 ping 數(shù)。
任何處于 [t - 3000, t] 時間范圍之內(nèi)的 ping 都將會被計算在內(nèi),包括當前(指 t 時刻)的 ping。
保證每次對 ping 的調(diào)用都使用比之前更大的 t 值。
提示
每個測試用例最多調(diào)用 10000 次 ping。
每個測試用例會使用嚴格遞增的 t 值來調(diào)用 ping。
每次調(diào)用 ping 都有 1 <= t <= 10^9。
示例
輸入:inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
輸出:[null,1,2,3,3]
解答
我們準備一個隊列l(wèi)atest,用來存放距離當前時間3秒之內(nèi)的所有ping的時刻,每次ping時,都要考察隊列中較早入隊的時刻是否過期,移除所有過期的元素,并返回隊列的長度即為所求。
class RecentCounter:
def __init__(self):
self.latest = [] # 記錄三秒之內(nèi)的ping時刻
def ping(self, t: int) -> int:
self.latest.append(t) # 添加記錄
while self.latest and t - self.latest[0] > 3000:
self.latest.pop(0) # 移除3秒之前的數(shù)據(jù)
return len(self.latest)
if __name__ == "__main__":
r = RecentCounter()
print(r.ping(1))
print(r.ping(100))
print(r.ping(3001))
print(r.ping(3002))
如有疑問或建議,歡迎評論區(qū)留言~