当前位置:首页 > 力扣 > 力扣933题:队列的妙用:如何高效统计最近请求

力扣933题:队列的妙用:如何高效统计最近请求

6个月前 (05-22)

力扣933题:队列的妙用:如何高效统计最近请求 队列 枚举 数据结构 C++ 力扣 第1张

题目重解:

我们需要设计一个能统计最近3000毫秒内请求次数的系统。每当新的请求到来时,它会带有时间戳t,我们需要返回过去3000毫秒内(包括当前)发生的请求总数。这就像是在时间轴上维护一个滑动窗口,只关注最近3秒内的活动。


解题思路解析:

1.初始化:创建空队列存储时间戳

2.清理过期请求:每次新请求到来时,移除所有超过3000毫秒的旧请求

3.添加新请求:将当前请求时间戳加入队列

4.返回计数:队列长度即为有效请求数 整个过程确保了队列中只保留最近3000毫秒的请求,实现了O(1)均摊时间复杂度的操作。


代码注释版:

class RecentCounter { 
private: 
    queue count; // 存储请求时间戳的队列
public: 
    RecentCounter() {} // 构造函数初始化
    int ping(int t) {
       // 移除所有超过3000毫秒的旧请求
       while (!count.empty()) {
           int a = count.front(); // 检查队首元素
           if (a < t - 3000)
               count.pop(); // 移除过期请求
           else
               break; // 遇到第一个有效请求就停止
       }
       count.push(t); // 加入新请求
       return count.size(); // 返回有效请求数
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

题目解读‌我们面对的是一个典型的图论问题:给定一个城市的连接矩阵,需要计算其中相互连通的城市群(省份)数量。这个问题可以抽象为无向图中的连通分量计算,每个城市代表图中的一个节点,城市之间的连接关系代表...

征服力扣704题:三步掌握经典二分查找算法

征服力扣704题:三步掌握经典二分查找算法

题目重解我们面对的是算法领域最经典的二分查找问题:在一个已排序的整数数组中,快速定位目标值的位置。就像在一本按字母顺序排列的字典中查找单词,我们不需要逐页翻阅,而是通过不断折半的方式快速缩小搜索范围,...

力扣94:递归之美 轻松掌握二叉树中序遍历

力扣94:递归之美 轻松掌握二叉树中序遍历

题目解读二叉树的中序遍历是一种基础且重要的树遍历方式,其遍历顺序为:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。对于二叉搜索树,中序遍历的结果恰好是节点值的升序排列。给定一个二叉...

力扣540题:线性扫描法如何高效定位唯一数

力扣540题:线性扫描法如何高效定位唯一数

题目重解一个严格递增的有序数组中,除某个元素外,其余每个元素均出现两次。这个看似简单的条件背后隐藏着巧妙的规律——单一元素会打破数组的"成对对称性"。题目要求以O(log n)时间...

手搓双向链表代码全解析:从零开始实现双向链表数据结构(附注释与实战步骤)

一、简介和特点双向链表(Double Linked List)是一种基础的数据结构,它由多个节点组成,每个节点包含数据域、指向下一个节点的指针(next)和指向前一个节点的指针(last)。与单向链表...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。