题目地址:
https://leetcode.com/problems/design-hit-counter/
设计一个数据结构。会接连进来一些数字,代表时间,要求该数据结构能动态查询过去长度为 300 300 300的这个时间段来了多少个数字。
思路是队列,来一个数字就入队,查询的时候只需要把队首的过期的数字删掉即可。代码如下:
class HitCounter {
public:
queue<int> q;
HitCounter() {}
void hit(int timestamp) { q.push(timestamp); }
int getHits(int timestamp) {
while (q.size() && q.front() <= timestamp - 300) q.pop();
return q.size();
}
};
/**
* Your HitCounter object will be instantiated and called as such:
* HitCounter* obj = new HitCounter();
* obj->hit(timestamp);
* int param_2 = obj->getHits(timestamp);
*/
hit时间复杂度 O ( 1 ) O(1) O(1),getHits是 O ( n ) O(n) O(n);空间 O ( n ) O(n) O(n)。