362 敲击计数器
题目描述:
设计一个敲击计数器,使它可以统计在过去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()&×tamp-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 敲击计数器相关推荐
- 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 ...
- LeetCode刷题实战362:敲击计数器
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- 机试算法题-敲击计数器
题目: 设计一个敲击计数器,使它可以统计在过去 5 分钟内被敲击次数.(即过去 300 秒) 您的系统应该接受一个时间戳参数 timestamp (单位为 秒 ),并且您可以假定对系统的调用是按时间顺 ...
- LeetCode-Python-362. 敲击计数器
设计一个敲击计数器,使它可以统计在过去5分钟内被敲击次数. 每个函数会接收一个时间戳参数(以秒为单位),你可以假设最早的时间戳从1开始,且都是按照时间顺序对系统进行调用(即时间戳是单调递增). 在同一 ...
- 【LeetCode - 362】敲击计数器
文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路 使用一个队列用于存储敲击时的时间戳,定义一个变量 startIndex 作为队首元素值,即五分钟内的第一次敲击的时间 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
最新文章
- 计算机的一些小操作,电脑小白操作中最实用的9个技巧!
- 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
- pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
- 广域网优化产品的5大应用场景—Vecloud
- WHU 1470 Join in tasks 水题
- 支持在iPad中播放的HTML5视频网站推荐
- 项目代码迁移(使用git)
- arp协议的主要功能是_计算机网络之ARP协议
- Mac、centos安装MongoDB
- 国内可外用免费语料库下载资源汇总, 语言翻译必备:国内外23个语料库推荐
- 网页导出pdf不完整_这些 PDF 神器,请你务必收藏
- IDEA 创建工作空间 (空项目) 项目组
- 海天讲座(一)最优传输理论
- 6.Cython使用WinGw编译pyd
- Python小记(一):import和from。。。import区别?
- ThreeJS后期处理
- 建议收藏5款办公必备电脑软件
- 遥感的几何校正、正射校正、辐射校正
- Huggingface简介及BERT代码浅析
- SAP770系统FI模块配置(配置会计科目表)