侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

最近的请求次数问题解析及实现(LCR 042)

LouisFonda
2024-05-22 / 0 评论 / 0 点赞 / 3 阅读 / 0 字 / 正在检测是否收录...

最近的请求次数问题解析及实现(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

总结

通过使用队列来记录请求的时间戳,并在每次收到请求时更新队列,我们可以高效地解决这个问题,并返回特定时间范围内最近的请求次数。

0

评论区