思路:
- 单queue实现(敲击时间为单调递增)
- 使用pair<int,int>类型 first second 代替 map的计算功能
代码:
class HitCounter {
private:
queue<pair<int, int>> q;
int sum;
public:
HitCounter() {sum=0;}
//指定时间敲击计数器
void hit(int timestamp) {
//重复敲击
if(!q.empty() && q.back().first == timestamp) {
q.back().second++;
sum++;
}
//首次敲击
else {
q.push(make_pair(timestamp, 1));
sum++;
}
}
//返回过去5分钟内被敲击的次数
int getHits(int timestamp) {
//过期敲打次数移除
while(!q.empty() && (timestamp - q.front().first >= 300)) {
sum -= q.front().second;
q.pop();
}
return sum;
}
};
本文介绍了一种使用C++实现的简单计数器,利用队列存储敲击事件的时间和次数,针对单调递增的敲击时间,提供首次和重复敲击的处理,并能实时返回过去5分钟内的敲击次数。
5191

被折叠的 条评论
为什么被折叠?



