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

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

7个月前 (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(); // 返回有效请求数
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣70题:告别暴力递归!从零实现记忆化搜索解法

力扣70题:告别暴力递归!从零实现记忆化搜索解法

题意解析:想象你站在楼梯底部,面前有n级台阶。每次你可以选择跨1级或2级台阶,最终到达顶端的路径有多少种不同的走法?这个问题本质上是在探索分叉决策的叠加效果——当我们把每个台阶处的选择看作二叉树的分支...

力扣746:三步通关最小花费爬楼梯

力扣746:三步通关最小花费爬楼梯

题目解析:站在楼梯的某个台阶时,需要支付当前台阶对应的体力值cost[i],之后可以选择向上爬1或2个台阶。最终目标是到达‌楼层顶部‌(即数组末尾之后的位置),且初始位置可选择下标0或1的台阶作为起点...

力扣第71题:用栈轻松解决Unix路径简化问题

力扣第71题:用栈轻松解决Unix路径简化问题

题目解读:在Unix风格的文件系统中,我们经常需要处理各种复杂的路径表示。给定一个绝对路径字符串,我们需要将其转换为最简化的规范路径。规范路径要求:路径始终以斜杠'/'开头;两个目录名...

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

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

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

力扣654:递归分治的艺术 如何用最大元素构建二叉树

力扣654:递归分治的艺术 如何用最大元素构建二叉树

题目重解我们面对一个看似简单却充满递归魅力的题目:给定一个不含重复元素的整数数组,需要构建一棵特殊的二叉树。这个树的每个父节点都必须是当前子数组中的最大元素,而它的左右子树则分别由该最大值左侧和右侧的...

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

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

发表评论

访客

看不清,换一张

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