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