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]

提示:

  1. 每个测试用例最多调用 10000 次 ping
  2. 每个测试用例会使用严格递增的 t 值来调用 ping
  3. 每次调用 ping 都有 1 <= t <= 10^9
  4. class RecentCounter {
    
        public RecentCounter() {
             
        }
        
        int[] rds = new int[10000];
        int cnt=-1;
        int i=0;
        public int ping(int t) { cnt++; rds[cnt]=t; //不用每次都遍历,下次的i就是前面最后的i for( ;i<=cnt;++i){ if(rds[i]>=t-3000) break; } return cnt-i+1; } }

    思路:直接用数组来存储t,因为数组是严格递增的所以判断if(rds[i]>=t-3000) break; 就是最近的索引,因为t是严格递增的所以可以利用之前的已经查询的结果(用一个全局变量i缓存,下次循环还是从i开始遍历),这样可以节约很多时间。尽量别用自带的队列数据结构,开销太大。目前beat 100% 。

猜你喜欢

转载自www.cnblogs.com/chen-jack/p/9932957.html