问题描述:
完成两个函数:
RecentCounter()初始化计数器
int ping(int t):在时间 t
添加一个新请求,其中 t
表示以毫秒为单位的某个时间,并返回过去 3000
毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t]
内发生的请求数。
思路:
可以选择使用队列解决,每次ping的时候,将参数入队,首先根据该参数计算出时间范围,最重要的是左界,然后从队首遍历队列,如果队首元素小于左界则出队;如果队首元素大于等于左界则此时队列大小就是返回值,并且退出循环。
代码如下:
class RecentCounter {
public:
queue<int> requests;
RecentCounter() {
queue <int> empty;
swap(empty,requests);
}
int ping(int t) {
int left=t-3000,num=0;
requests.push(t);
while(!requests.empty()){
int tmp=requests.front();
if(tmp>=left){
num=requests.size();
break;
}
else{
requests.pop();
}
}
return num;
}
};