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

更多精彩内容,请关注【力扣简单题】

题目

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

写一个 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))

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容