「队列」leetcode 933.最近的请求次数(简单)

140 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、了解题目

附上原题链接:933. 最近的请求次数

写一个 RecentCounter 类来计算特定时间范围内最近的请求。

请你实现 RecentCounter 类:

RecentCounter() 初始化计数器,请求数为 0

int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。

保证 每次对 ping 的调用都使用比之前更大的 t 值。

二、题解分析

(1)解题思路

  • 越早发出的请求越早不在最近 3000ms 内的请求里;
  • 满足先进先出,用队列。

(2)解题步骤

  • 有新请求就入队;
  • 3000毫秒前发出的请求就出队。

三、代码实现

依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:

let RecentCounter = function () {
    this.queue = [];
}
​
RecentCounter.prototype.ping = function (t) {
    // 1.新请求的数一定是在最后的
    this.queue.push(t);
    // 2.while的时候会一直判断是否小于,小于则剔除
    while (this.queue[0] < t - 3000) {
        // 2.1 把数组的第一个元素删除并返回
        this.queue.shift();
    }
    // 3.返回3000s内所存在请求的个数
    return this.queue.length;
}
​
let obj = new RecentCounter();
​
obj.ping(1);
obj.ping(1);
obj.ping(100);
obj.ping(3001);
obj.ping(3002);
​
console.log(obj); // RecentCounter { queue: [ 100, 3001, 3002 ] }

以上就是关于最近的请求次数的题解,不知道对小伙伴们是否有帮助呢?

我们下期见👋👋👋