文章目录

  • 1、题目描述
  • 2、解题思路
  • 3、解题代码

1、题目描述

2、解题思路

  使用一个队列用于存储敲击时的时间戳,定义一个变量 startIndex 作为队首元素值,即五分钟内的第一次敲击的时间戳;

  1、hit(timestamp):

  如果 startIndex == -1,即此时 queue 没有任何元素,则当前 hit 就是第一次敲击,startIndex = timestamp;

  2、getHits(int timestamp):

  五分钟内的边界是满足 timestamp - startIndex + 1 == 300。

  如果 timestamp - startIndex + 1 > 300,表明当前的 startIndex 是超出五分钟的。

  我们把队首元素删除,用新的队首去更新 startIndex,重新判断,循环往复,直到 timestamp - startIndex + 1 <= 300 或者队列为空。

  最终返回队列的元素个数。

3、解题代码

class HitCounter {Queue<Integer> queue;int startIndex = -1;    // 五分钟内的第一次敲击的时间戳,-1 表示没有元素/** Initialize your data structure here. */public HitCounter() {queue = new LinkedList<Integer>();}/** Record a hit.@param timestamp - The current timestamp (in seconds granularity). */public void hit(int timestamp) {if(startIndex == -1) {  // 当前没有元素,新敲击的作为第一个startIndex = timestamp;}queue.offer(timestamp);}/** Return the number of hits in the past 5 minutes.@param timestamp - The current timestamp (in seconds granularity). */public int getHits(int timestamp) {// 五分钟的临界值应该是 timestamp - startIndex + 1 == 300// 或者队列根本没有元素while (timestamp - startIndex >= 300 && !queue.isEmpty()) {// timestamp - startIndex >= 300 说明当前队首元素超过了5分钟,删除队首queue.poll();if(!queue.isEmpty()) {// 如果队列不为空,更新 startIndex 为新的队首startIndex = queue.peek();} else {// 如果队列为已经为空,则 startIndex 恢复成初始值startIndex = -1;}}return queue.size();}
}/*** Your HitCounter object will be instantiated and called as such:* HitCounter obj = new HitCounter();* obj.hit(timestamp);* int param_2 = obj.getHits(timestamp);*/

【LeetCode - 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. 362 敲击计数器

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

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

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

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

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

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

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

  9. leetcode刷题目录总结

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

最新文章

  1. 设置linux初始root密码
  2. C语言extern关键字定义外部变量--Redis源码extern使用
  3. (0006) iOS 开发之JavaScriptCore 实现UIWebView和HTML的交互
  4. htm怎么让图片和搜索框在同一行_新手怎么玩好小红书
  5. 多重继承java_Java中的多重继承与组合vs继承
  6. 摆脱困境:向REST API添加验证
  7. Windows10搭建FTP服务器
  8. “知识图谱+”系列:知识图谱+强化学习
  9. Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接
  10. 用前考虑清楚,伤敌一千自损八百的字体反爬虫
  11. 怎样写 OpenStack Neutron 的 Extension (三)
  12. 【python】python程序的输入输出以及标识符详细解读
  13. python只想调用函数不想执行.py
  14. 记录一下,不是所有的韩语输入法apk,装到同一个系统,都能弹出软键盘
  15. 统计学之偏度系数和峰度系数
  16. ImageNet缔造者:让冰冷的机器读懂照片背后的故事
  17. IT 行业的创新 - 创新的迷思 (7-8)
  18. 分级基金下折套利风险介绍
  19. C++虚函数、多继承和虚基类学习心得 内存布局
  20. Mac上下载百度云盘大文件百度云盘客户端限速怎么处理

热门文章

  1. python做房源饼状图_python使用matplotlib画饼状图
  2. 天线的S11,S12,S21,S22参数解析(个人理解仅供参考)
  3. Android自定义网络状态请求页面
  4. MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究
  5. 微信小程序聊天客服工具
  6. sqlplus之runstats
  7. 软件测试及Java开发前了解的基础
  8. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
  9. Visual C++ 6.0 ( VC 6 )带 SP6 中英文双语版 下载
  10. 总结今年一些公司的待遇