933.最近のリクエスト回数(Python)

1184 ワード

もっと素晴らしい内容は、「力ボタンの簡単な問題」に注目してください.
タイトル
難易度:★☆☆☆☆タイプ:キュー
RecentCounterクラスを書いて、最近のリクエストを計算します.
ping(int t)という方法しかありません.ここで、tはミリ秒単位の時間を表します.
3000ミリ秒前から現在までのping数を返します.
[t−3000,t]時間範囲内のpingは、現在(t時刻を指す)のpingを含む計算される.
pingの呼び出しのたびに、以前よりも大きなt値が使用されることを保証します.
各テスト・インスタンスに最大10000回pingを呼び出すよう求めます.各テストインスタンスは、厳格に増加したt値を使用してpingを呼び出します.pingを呼び出すたびに1<=t<=10^9となる.

入力:inputs=[[RecentCounter],[ping],[ping],[ping],[ping],[ping],[ping],[inputs=[[],[100],[300],[3002]]出力:[null,1,2,3,3]
に答える
現在の時間から3秒以内のすべてのpingの時刻を格納するためのキューlatestを用意し、pingのたびに、キュー内の早期にエンキューされた時刻が期限切れになったかどうかを考察し、期限切れの要素をすべて除去し、キューの長さを返します.
class RecentCounter:
    def __init__(self):
        self.latest = []            #        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      
        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))

質問やアドバイスがあれば、コメントエリアへようこそ~