写一个 RecentCounter 类来计算最近的请求。
它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。
返回从 3000 毫秒前到现在的 ping 数。
任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。
保证每次对 ping 的调用都使用比之前更大的 t 值。
输入:inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
输出:[null,1,2,3,3]
题目分析:第一次读到这个题根本不知道说的是什么意思,看了别人的分析才知道:
题目是说计算3000毫秒前到现在的调用次数, 对于输入1来说, [-2999, 1] 注意两边是闭区间 只有1这个时刻调用了一次,所以输出1;输入100以后呢,区间变成[-2900, 100], 这时候,1是包含在内的(-2900...1...100),因为在这个区间里,调用了两次, 输出2;输入3001呢,区间变成[1, 3001], 这时候包含在区间里的有几个呢? (1...100...3001),输出3;输入3002呢,区间变成[2, 3002], 这时候包含在区间里的只有(100...3001...3002),因此还是3。
class RecentCounter {
public:
queue<int>qe;
public:
RecentCounter() {
}
int ping(int t) {
qe.push(t);
while(!qe.empty()) {
if (qe.front() < t- 3000) {
qe.pop();
} else {
break;
}
}
return qe.size();
}
};
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter* obj = new RecentCounter();
* int param_1 = obj->ping(t);
*/
原文:https://www.cnblogs.com/wangdongfang/p/13701054.html