【LeetCode75】第二十七题(933)最近的请求次数

目录

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

首先这是LeetCode75里第一道设计类的题目,这种类型的题目会比较新颖,就是按照题目要求来设计一个类。然后测试用例是模拟真实调用类的成员函数的。

这道题也算是简单题,整个类除了构造函数以外就一个成员函数,测试用例也就只调用这一个函数。

在调用函数的时候会连同带一个参数,表示当前请求的时间,然后要返回当前这个时间的3000秒内的请求次数。

那么我们就可以拿一个容器来存放请求时间,然后在调用ping这个函数时候,我们可以在容器里寻找比当前请求时间小3000以内的请求时间数量,然后返回出去。

但是题目有保证说每次请求的时间都会比之前的请求时间更大,因此我们存放请求时间的这个容器内部,是一个递增的状态,因此如果我们发现一个容器里的一个请求时间比当前的请求时间小,并且差值大于3000了,我们就可以直接把这个请求时间从容器里删除了。因为后面的请求时间都会比现在的请求时间更大,就更用不到这个较小的请求时间了。

所以我们可以使用双端队列来存放请求时间,每次添加请求时间都放在队尾,然后发现队头与当前请求时间的差值大于3000的时候,就可以把队头删除。最后返回双端队列的长度即可。

代码+运行结果:

class RecentCounter {
public:
    deque<int>count;
    RecentCounter() {
        
    }
    
    int ping(int t) {
        count.push_back(t);
        while(count.front()<t-3000) count.pop_front();
        return count.size();
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值