Write a class RecentCounter
to count recent requests.
It has only one method: ping(int t)
, where t represents some time in milliseconds.
Return the number of ping
s that have been made from 3000 milliseconds ago until now.
Any ping with time in [t - 3000, t]
will count, including the current ping.
It is guaranteed that every call to ping
uses a strictly larger value of t
than before.
Example 1:
Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
Output: [null,1,2,3,3]
Note:
- Each test case will have at most
10000
calls toping
. - Each test case will call
ping
with strictly increasing values oft
. - Each call to ping will have
1 <= t <= 10^9
.
题意:对于每个输入t,统计前面的输入中值在[t-3000,t]之间的元素的个数。这里给出的输入是递增有序的。
思路:因给出的元素递增有序,可以使用一个先进先出的队列来记录数据。动态维护队列的对头元素,使其为处于[t-3000,t]中的第一个元素,此时队列中的元素的个数即为要求的数据。
class RecentCounter {
public:
queue<int>que;
RecentCounter() {
}
int ping(int t) {
que.push(t);
int len=que.size(),cnt=0;
while(que.front()<t-3000){
que.pop();
cnt++;
}
return len-cnt;
}
};