[简单-933.最近的请求次数]

[简单-933.最近的请求次数]

写一个 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。

方法1:使用队列对每次ping进行存储,因为每次的结果依赖上次的结果。
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