来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-recent-calls
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
自己很自然的想到,只要维持一个vector存储每次传进来的时间,然后每次从最新传进来的时间里去往回找到3000毫秒内的请求数返回。重置操作通过将vector中的所有元素pop_back()。
class RecentCounter {
public:
vector<int> res;
RecentCounter() {
//重置即清空存储时间的数组
for(int i = 0; i < res.size(); i ++)
res.pop_back();
}
int ping(int t) {
int count = 0; //请求数
res.push_back(t);
for(int i = res.size() - 1; i >= 0; i --)
//过去3000毫秒发生的请求数
if(res[res.size() - 1] - res[i] <= 3000) count ++;
else break;
return count;
}
};
但是实际上用一个队列来维持就好了,每次新入队一个时间时,就将不在3000毫秒范围内的队头的时间出队,然后队列的size就是过去3000毫秒发生的请求数。
class RecentCounter {
queue<int> q;
public:
RecentCounter() {}
int ping(int t) {
q.push(t);
while (q.front() < t - 3000) {
q.pop();
}
return q.size();
}
};