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

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

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



原创内容 转载请注明出处

分享给朋友:

相关文章

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

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

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

手把手教你实现头插法树:从代码到原理的深度解析

一、简介和特点头插法树是一种基于链表实现的树形数据结构,其核心思想是通过链表头插法管理节点的孩子节点。在本文的代码示例中,我们使用C++模板类实现了树结构,每个树节点(treenode<T>...

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

一、题目解读力扣3112题要求解决带时间限制的最短路径问题:给定一个有向图,节点具有消失时间,需计算从起点到各节点的最短路径,且路径总时间不能超过节点的消失时间。题目难点在于需在传统最短路径算法(如D...

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

一、题目解读洛谷1220题要求计算在n个位置放置灯的情况下,通过关闭连续区间灯并移动至区间端点,使得总耗电量最小。需考虑灯的功率与位置差异,设计高效的算法求解最优策略。二、解题思路1. 动态规划 +...

LeetCode 2778题解:平方和的高效计算与因数遍历优化(C++实现)

LeetCode 2778题解:平方和的高效计算与因数遍历优化(C++实现)

一、题目解读LeetCode 2778题要求计算数组中下标为n的因数的元素的平方和。例如,若n=6,其因数为1、2、3、6,则需计算nums[0]、nums[1]、nums[2]、nums[5]的平方...

手搓顺序表实现栈 代码详解及新手教程——从原理到实现的完整指南

一、简介和特点顺序栈是一种基于数组实现的后进先出(LIFO)数据结构。通过动态数组管理存储空间,它具备以下特点:1. 数组存储:数据连续存储,支持随机访问,访问效率高。2. 动态扩容:当栈满时自动扩展...

发表评论

访客

看不清,换一张

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