美文网首页算法算法提高之LeetCode刷题
933. 最近的请求次数(Python)

933. 最近的请求次数(Python)

作者: 玖月晴 | 来源:发表于2019-05-31 11:09 被阅读1次

    题目

    难度:★☆☆☆☆
    类型:队列

    写一个 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"], inputs = [[],[1],[100],[3001],[3002]]
    输出:[null,1,2,3,3]

    解答

    我们准备一个队列latest,用来存放距离当前时间3秒之内的所有ping的时刻,每次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))
    

    如有疑问或建议,欢迎评论区留言~

    相关文章

      网友评论

        本文标题:933. 最近的请求次数(Python)

        本文链接:https://www.haomeiwen.com/subject/qfkwtctx.html