题目描述:
933. 最近的请求次数 显示英文描述
用户通过次数 140
用户尝试次数 166
通过次数 142
提交次数 319
题目难度 Easy
写一个 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。
思路:
比较简单的一道题目,定义一个数组用于存放每次调用时的时间,同时循环之前的数组,同时count用于存放数组的个数,初始化为0,同时将num数组初始化为10000,因为给出的提示是不超过调用的ping为10000,每次调用一个ping先将时间存储在数组中,然后进行遍历寻找result。
class RecentCounter {
int[] num;
int count;
public RecentCounter() {
num = new int[10000];
count = 0;
}
public int ping(int t) {
num[count++ ] = t;
int result = count;
for (int i = 0; i < count; i++) {
if(t - num[i] > 3000 ){
result --;
}else {
break;
}
}
return result;
}
}
排名靠前的代码
class RecentCounter {
public RecentCounter() {
}
int[] queue = new int[10000];
int size=0;
int front=0;
int rear=0;
public int ping(int t) {
queue[rear++] = t;
size++;
while(true) {
if (t - queue[front] > 3000) {
front++;
size--;
} else {
break;
}
}
return size;
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.ping(t);
*/
思路其实一样的。