LeetCode 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. 设计循环双端队列 | 中等 | 双端队列 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!