计算最近的请求次数

207 阅读1分钟

要求

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

请你实现 RecentCounter 类:

RecentCounter() 初始化计数器,请求数为 0 。 int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。 保证 每次对 ping 的调用都使用比之前更大的 t 值。

思路

let一个数组,存储请求,然后根据t-3000到t的这个时间段,shift掉小于t-3000的请求即可

代码

var RecentCounter = function () {
    // 创建要给数组,用来存储请求
    this.pingArray = []
};

/** 
 * @param {number} t
 * @return {number}
 */
RecentCounter.prototype.ping = function (t) {
    // 把请求存入数组中
    this.pingArray.push(t);
    // 因为时间是越来越大的,所以不存在顺序的问题
    while (this.pingArray[0] < (t - 3000)) {
        // 把小于t-3000的请求shift掉
        this.pingArray.shift();
    }
    // 得到的长度,就是[t-3000,t]时间段内的请求次数
    return this.pingArray.length;
};