1、题目:最近的请求次数
写一个RecentCounter类来计算特定时间范围内最近的请求。
请你实现RecentCounter类:
- RecentCounter()初始化计数器,请求数为0。
- int ping(int t)在时间 t 添加一个新请求,其中t表示以毫秒为单位的某个时间,并返回过去3000毫秒内发生的所有请求数(包括新请求)。确切地说,返回在[t-3000,t]内发生的请求数。
保证每次对ping的调用都使用比之前更大的 t 值。
2、解题思路
此题难度不大,最重要的是理解题目,由于题目看上去非常唬人。实际上,题目中的毫秒只是传入的参数 t ,并不需要其他知识,所以此题用队列来进行求解,当每次新传入值进入时,去检测队头是否小于 t - 3000,如果小于即pop出队,然后检测新队头是否小于,进行循环,最后返回队列的 size 即可。
3、代码
class RecentCounter {
public:
queue<int> q;
RecentCounter() {
}
int ping(int t)
{
q.push(t);
int front = q.front();
while(front < t - 3000)
{
q.pop();
front = q.front();
}
return q.size();
}
};