每天一道算法题(JavaScript篇):力扣933 最近的请求次数

Posted 啊a阿花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一道算法题(JavaScript篇):力扣933 最近的请求次数相关的知识,希望对你有一定的参考价值。

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

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

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-recent-calls

1️⃣队列

javascript中没有队列这个数据结构,但是可以用数组来实现所有的功能。队列是一个先进先出的数据结构,一般JavaScript中采用队列的数据解决问题时会用到

  1. 入队push()向数组中添加元素
  2. 出队shift()移除数组中第一个元素
  3. queue(0) 取数组的第一个元素

2️⃣题目分析

🤔可能比较迷惑的就是示例的输入输出是数组,但是给的代码模板却是一个构造函数

🧠 题目的意思可以理解为:按照数组的顺序去调用ping方法,每次调用ping方法传进去的t就是数组中发起请求的时间,返回的是一个数组,存放最近时间内的请求次数

🧠换个说法通过调用构造函数的prototype属性的ping方法,将请求时间t作为参数传入,返回最近时间内的请求次数。

例如传入数组[1,3000,30001]ping方法的调用情况

  • recentCounter.ping(1)就会返回[-2999,1]之间的请求次数
  • recentCounter.ping(3000)就会返回[0,3000]之间的请求次数
  • recentCounter.ping(3001)就会返回[1,3001]之间的请求次数

🙋‍♀️因为先发起的请求到时间后就会被剔除,先进先出所以考虑到可以使用队列来做。求3000毫秒内的请求次数,分析一下大致思路应该是

  1. 有新请求就入队
  2. 3000毫秒前的请求出队
  3. 队列的长度就是最近请求次数

🙊那首先肯定是先建一个队列,这个队列需要在ping方法中被访问。
🙊而且多次调用时访问的都是同一个队列,所以队列应该挂载在构造函数的this上,这样所有的类方法都能访问到(包括ping)

💯ping方法中实现的就应该是发起请求时将其入队,当不在时间范围内时将之前的请求踢出队,最后返回队列长度即可

3️⃣代码实现

var RecentCounter = function() {
    this.arrP=[]
};

/** 
 * @param {number} t
 * @return {number}
 */
RecentCounter.prototype.ping = function(t) {
//入队
    this.arrP.push(t)
    //当请求是3000毫秒之前时踢出队
    while(this.arrP[0]<t-3000){
        this.arrP.shift();
    }
    //返回队列长度
    return this.arrP.length
};

/**
 * Your RecentCounter object will be instantiated and called as such:
 * var obj = new RecentCounter()
 * var param_1 = obj.ping(t)
 */

可以看出其实在内存上还有很多改进的空间,大家如果有什么好的方法欢迎指教 🙏

占坑
代码模板里可能涉及到了构造函数、类和继承的概览,不明白的可以看这两篇文章,也许能让你更不明白😁
⭐⭐ 最通俗易懂的JavaScript继承和原型
⭐⭐吃了这颗糖,构造函数变class类

以上是关于每天一道算法题(JavaScript篇):力扣933 最近的请求次数的主要内容,如果未能解决你的问题,请参考以下文章

力扣93:复原IP地址(golang)-字节跳动算法题

力扣93:复原IP地址(golang)-字节跳动算法题

算法千题案例每日LeetCode打卡——93.宝石与石头

算法千题案例每日LeetCode打卡——93.宝石与石头

校招准备系列:每天一道算法题

7天带你全方位刷爆数据结构与算法,每天一道,高效刷题