题目描述:
设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数。
每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序对系统进行调用(即时间戳是单调递增)。
在同一时刻有可能会有多次敲击。

示例:
HitCounter counter = new HitCounter();

// 在时刻 1 敲击一次。
counter.hit(1);

// 在时刻 2 敲击一次。
counter.hit(2);

// 在时刻 3 敲击一次。
counter.hit(3);

// 在时刻 4 统计过去 5 分钟内的敲击次数, 函数返回 3 。
counter.getHits(4);

// 在时刻 300 敲击一次。
counter.hit(300);

// 在时刻 300 统计过去 5 分钟内的敲击次数,函数返回 4 。
counter.getHits(300);

// 在时刻 301 统计过去 5 分钟内的敲击次数,函数返回 3 。
counter.getHits(301);

进阶:
如果每秒的敲击次数是一个很大的数字,你的计数器可以应对吗?

方法1:
主要思路:
(1)使用队列存储敲击的时间戳,利用先进先出的特性,来再后面将需要弹出的元素过滤掉;
(2)在需要获得某个时刻的前5分钟的敲击数量时,既300秒,可以使用当前时刻减去队列头部元素时刻值,判断是否大于等于300,来过滤掉过期元素即可;

class HitCounter {public:queue<int> q;//存储结构/** Initialize your data structure here. */HitCounter() {}/** Record a hit.@param timestamp - The current timestamp (in seconds granularity). */void hit(int timestamp) {q.push(timestamp);//存储输入的时间戳}/** Return the number of hits in the past 5 minutes.@param timestamp - The current timestamp (in seconds granularity). */int getHits(int timestamp) {//处理过期的时间戳while(!q.empty()&&timestamp-q.front()>=300){q.pop();}//返回当前有效的时间戳的数量return q.size();}
};/*** Your HitCounter object will be instantiated and called as such:* HitCounter* obj = new HitCounter();* obj->hit(timestamp);* int param_2 = obj->getHits(timestamp);*/

362 敲击计数器相关推荐

  1. LeetCode 362. 敲击计数器(map)

    文章目录 1. 题目 2. 解题 1. 题目 设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序 ...

  2. leetcode——362.敲击计数器

    思路: 单queue实现(敲击时间为单调递增) 使用pair<int,int>类型 first second 代替 map的计算功能 代码: class HitCounter {priva ...

  3. LeetCode 362. 敲击计数器

    具体思想: 队列直接整: 具体代码: class HitCounter {public:HitCounter() {}void hit(int timestamp) {que.push(timesta ...

  4. LeetCode - 362 敲击计数器(设计)

    双端队列 class HitCounter {private Deque<Integer> deque;public HitCounter() {deque = new LinkedLis ...

  5. ​LeetCode刷题实战362:敲击计数器

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. 机试算法题-敲击计数器

    题目: 设计一个敲击计数器,使它可以统计在过去 5 分钟内被敲击次数.(即过去 300 秒) 您的系统应该接受一个时间戳参数 timestamp (单位为 秒 ),并且您可以假定对系统的调用是按时间顺 ...

  7. LeetCode-Python-362. 敲击计数器

    设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序对系统进行调用(即时间戳是单调递增). 在同一 ...

  8. 【LeetCode - 362】敲击计数器

    文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路   使用一个队列用于存储敲击时的时间戳,定义一个变量 startIndex 作为队首元素值,即五分钟内的第一次敲击的时间 ...

  9. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

最新文章

  1. 计算机的一些小操作,电脑小白操作中最实用的9个技巧!
  2. 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
  3. pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
  4. 广域网优化产品的5大应用场景—Vecloud
  5. WHU 1470 Join in tasks 水题
  6. 支持在iPad中播放的HTML5视频网站推荐
  7. 项目代码迁移(使用git)
  8. arp协议的主要功能是_计算机网络之ARP协议
  9. Mac、centos安装MongoDB
  10. 国内可外用免费语料库下载资源汇总, 语言翻译必备:国内外23个语料库推荐
  11. 网页导出pdf不完整_这些 PDF 神器,请你务必收藏
  12. IDEA 创建工作空间 (空项目) 项目组
  13. 海天讲座(一)最优传输理论
  14. 6.Cython使用WinGw编译pyd
  15. Python小记(一):import和from。。。import区别?
  16. ThreeJS后期处理
  17. 建议收藏5款办公必备电脑软件
  18. 遥感的几何校正、正射校正、辐射校正
  19. Huggingface简介及BERT代码浅析
  20. SAP770系统FI模块配置(配置会计科目表)

热门文章

  1. 【电源专题】开关电源的控制器和稳压器的区别
  2. 王思聪吃翔项目 - 共享充电宝 - 经营、销售分析系统DB设计实践
  3. vue-select-tu--一款基于vue的多元图形选择插件
  4. 29-折半查找法的使用
  5. 线性时态逻辑ctl_基于决策过程的广义可能性时态逻辑模型检测
  6. 项目实训第一周2-学习系统的使用
  7. 新页微QI发射5w原理
  8. latex 公式换行、对齐
  9. 用Java语言开发物联网设备应用(5)
  10. DFA确定化和最小化