思路:
- 单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;
}
};