LeetCode LCR 042. 最近的请求次数

题目描述

LCR 042. 最近的请求次数

思路分析

解法一:队列维护时间窗(推荐)

核心思路

  • 用队列记录所有请求时间。
  • 每次 ping(t) 先入队,再将小于 t-3000 的时间全部出队。
  • 队列长度即为最近 3000 毫秒的请求数。

复杂度分析

  • 时间复杂度:O(1),均摊每个时间只入队出队一次。
  • 空间复杂度:O(n),窗口内请求数量上限为 n。
import java.util.*;

class RecentCounter {
    private final Deque<Integer> queue = new ArrayDeque<>();

    public RecentCounter() {}

    public int ping(int t) {
        queue.offerLast(t);

        while (!queue.isEmpty() && queue.peekFirst() < t - 3000) {
            queue.pollFirst();
        }

        return queue.size();
    }
}
type RecentCounter struct {
    queue []int
}

func Constructor() RecentCounter {
    return RecentCounter{}
}

func (r *RecentCounter) Ping(t int) int {
    r.queue = append(r.queue, t)

    for len(r.queue) > 0 && r.queue[0] < t-3000 {
        r.queue = r.queue[1:]
    }

    return len(r.queue)
}

相似题目

题目 难度 考察点
346. 数据流中的移动平均值 简单 队列
359. 日志速率限制器 简单 时间窗口
362. 敲击计数器 中等 设计
622. 设计循环队列 中等 队列
641. 设计循环双端队列 中等 双端队列
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/88966955
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!