小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、了解题目
附上原题链接: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 ] }
以上就是关于最近的请求次数的题解,不知道对小伙伴们是否有帮助呢?
我们下期见👋👋👋