933. 最近的請求次數(shù)(Python)

更多精彩內(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ū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容