933. Number of Recent Calls

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 pings 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:

  1. Each test case will have at most 10000 calls to ping.
  2. Each test case will call ping with strictly increasing values of t.
  3. 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;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值