【LeetCode - 362】敲击计数器
文章目录
- 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】敲击计数器相关推荐
- LeetCode 362. 敲击计数器(map)
文章目录 1. 题目 2. 解题 1. 题目 设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序 ...
- leetcode——362.敲击计数器
思路: 单queue实现(敲击时间为单调递增) 使用pair<int,int>类型 first second 代替 map的计算功能 代码: class HitCounter {priva ...
- LeetCode 362. 敲击计数器
具体思想: 队列直接整: 具体代码: class HitCounter {public:HitCounter() {}void hit(int timestamp) {que.push(timesta ...
- LeetCode - 362 敲击计数器(设计)
双端队列 class HitCounter {private Deque<Integer> deque;public HitCounter() {deque = new LinkedLis ...
- 362 敲击计数器
题目描述: 设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序对系统进行调用(即时间戳是单调递增 ...
- LeetCode刷题实战362:敲击计数器
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- LeetCode-Python-362. 敲击计数器
设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序对系统进行调用(即时间戳是单调递增). 在同一 ...
- 机试算法题-敲击计数器
题目: 设计一个敲击计数器,使它可以统计在过去 5 分钟内被敲击次数.(即过去 300 秒) 您的系统应该接受一个时间戳参数 timestamp (单位为 秒 ),并且您可以假定对系统的调用是按时间顺 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
最新文章
- 设置linux初始root密码
- C语言extern关键字定义外部变量--Redis源码extern使用
- (0006) iOS 开发之JavaScriptCore 实现UIWebView和HTML的交互
- htm怎么让图片和搜索框在同一行_新手怎么玩好小红书
- 多重继承java_Java中的多重继承与组合vs继承
- 摆脱困境:向REST API添加验证
- Windows10搭建FTP服务器
- “知识图谱+”系列:知识图谱+强化学习
- Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接
- 用前考虑清楚,伤敌一千自损八百的字体反爬虫
- 怎样写 OpenStack Neutron 的 Extension (三)
- 【python】python程序的输入输出以及标识符详细解读
- python只想调用函数不想执行.py
- 记录一下,不是所有的韩语输入法apk,装到同一个系统,都能弹出软键盘
- 统计学之偏度系数和峰度系数
- ImageNet缔造者:让冰冷的机器读懂照片背后的故事
- IT 行业的创新 - 创新的迷思 (7-8)
- 分级基金下折套利风险介绍
- C++虚函数、多继承和虚基类学习心得 内存布局
- Mac上下载百度云盘大文件百度云盘客户端限速怎么处理
热门文章
- python做房源饼状图_python使用matplotlib画饼状图
- 天线的S11,S12,S21,S22参数解析(个人理解仅供参考)
- Android自定义网络状态请求页面
- MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究
- 微信小程序聊天客服工具
- sqlplus之runstats
- 软件测试及Java开发前了解的基础
- python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
- Visual C++ 6.0 ( VC 6 )带 SP6 中英文双语版 下载
- 总结今年一些公司的待遇