队列
是一个先进先出的数据结构,JS中没有队列,但可以用Array实现队列所有的功能
const queue=[];
queue.push(1);
queue.push(2);
const item1=queue.shift();
const item2=queue.shife();/*移除数组的第一个元素,并且返回它*/
最近的请求次数,分析题目,就是说,有新的请求就入队,在3000ms之前发出的请求就出队,队列的长度就是请求的次数。
这么看来,其实简单,但是在新建队列的时候会发现,新建的队列需要在ping方法中被访问,并且多次调用访问的都是同一个队列,这只需要在构造函数中,将队列挂在this上就可以了,如此就可以在所有的方法中访问这个队列。
每发起一个请求,都需要执行一次入队,然后用while来判断,队头是否在3000ms要求的范围内,不符合就用shift踢出去,最后剩下的队列的长度就是请求的次数。
上代码
var RecentCounter = function() {
this.q=[]
};
/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function(t) {
this.q.push(t)
while (this.q[0]< t-3000) {
this.q.shift()
}
return this.q.length
};
/**
* Your RecentCounter object will be instantiated and called as such:
* var obj = new RecentCounter()
* var param_1 = obj.ping(t)
*/