一日一练: 最新的请求数

66 阅读1分钟

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

需要注意的是:本来这题应该使用队列去实现(FIFO),甚至为了节省内存,可以使用循环队列。但是js中没有相关概念,如果去封装一个类似队列的数据,是需要在数组的基础上去操作的,但那样的效率应该没有直接去操作数组高。所以直接操作数组。

这道题思路也很简单:

    1. ping的时候,先将t推到队尾
    1. 然后计算 t - 3000,即之前有效ping的最小时间,然后从队首开始与这个值作比较,
    • 如果比该值小,就将其从队列里推出(shift之后),继续比较新队首是否符合条件
    • 只要比该值大,立刻推出比较循环
    1. 当前数组的长度就是特定时间范围内最近的请求
class RecentCounter {
    public queue: number[]
    constructor() {
        this.queue = []
    }
    ping(t: number): number {
        this.queue.push(t)
        while(this.queue[0] < (t - 3000)) {
            this.queue.shift()
        }
        return this.queue.length
    }
}