前言
这次这个题目属于比较简单,可使用队列去做,至于队列相关的基础知识,比如什么是队列,队列的基本语法之类的,我准备后面会整理一篇文章,因为我也是最近才了解队列;
好了,进入主题啦。。。。。。
题目
大概题意:
给一个时间,在这个时间的过去3000毫秒内,一共有几次请求。
如果给的时间是t, 那么在[t - 3000, t]这个区间内一共有几次请求。
分析一波
每次传进来的时间,要看它在这时间过去的3000毫秒内,有几次请求?
其实就是看一下传进来这个时间时,之前传进来的那些时间是否有超时的;
只需要把之前进来的那些时间,与新传进来的时间相减,值大于3000毫秒的话,
那么就把之前的那个时间值删除,继续这种操作;
最后返回积累值的长度就可以了;
怎么做?
每次传进来一个t值,就直接添加到链表或者数组的尾部,
然后去对比一下数组或者链表里头部开始比较哪些元素超过了3000毫秒,
也就是超过了[t - 3000, t]这个区间,就pop出去。
实践,上代码分析
var RecentCounter = function() {
this.queue = new Queue();
};
/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function(t) {
this.queue.enqueue(t);
while((t-this.queue.front())>3000) this.queue.dequeue();
return this.queue.size();
};
此题目中用的是队列;
先new一个队列;
在方法里把传进来的时间添加到队列的尾部;用enqueue();
然后使用一个循环去判断队列的头部是否有与传进来的t相减大于3000的元素,
有的话就直接删除掉,
直到此次传进来t值后,队列头部没有超过3000毫秒的元素为止;
最后返回队列的长度就可以了;