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]
提示:
- 每个测试用例最多调用
10000次ping。 - 每个测试用例会使用严格递增的
t值来调用ping。 - 每次调用
ping都有1 <= t <= 10^9 -
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% 。

浙公网安备 33010602011771号