最近的请求次数问题解析及实现(LCR 042)
在这篇文章中,我们将讨论如何解决 LeetCode LCR 042 题:"最近的请求次数"。该问题要求实现一个 RecentCounter 类,用于计算特定时间范围内最近的请求。
问题描述
设计一个 RecentCounter 类,其中包含以下方法:
RecentCounter()
:初始化计数器,请求次数为 0。int ping(int t)
:在时间 t 添加一个新请求,返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
要求保证每次对 ping
的调用都使用比之前更大的 t 值。
解题思路
我们可以使用队列来实现这个类。每次收到请求时,我们将其添加到队列中,并且移除队列头部所有不在范围 [t-3000, t] 内的请求,最后返回队列的长度即可。
JavaScript 实现
下面是用 JavaScript 实现的 RecentCounter 类:
class RecentCounter {
constructor() {
this.queue = [];
}
ping(t) {
this.queue.push(t);
while (this.queue[0] < t - 3000) {
this.queue.shift();
}
return this.queue.length;
}
}
示例和测试
使用上述类,我们可以进行一些示例和测试,例如:
const recentCounter = new RecentCounter();
console.log(recentCounter.ping(1)); // 输出 1
console.log(recentCounter.ping(100)); // 输出 2
console.log(recentCounter.ping(3001)); // 输出 3
console.log(recentCounter.ping(3002)); // 输出 3
总结
通过使用队列来记录请求的时间戳,并在每次收到请求时更新队列,我们可以高效地解决这个问题,并返回特定时间范围内最近的请求次数。
评论区