共计 900 个字符,预计需要花费 3 分钟才能阅读完成。
题目地址:https://leetcode-cn.com/probl… 题目描述:写一个 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]
解答:使用一个 list 来存储请求的时间,每一次调用 ping 函数,先把这次时间存入 list 中,然后查找 list 中所有和当前时间差大于 3000 的项并删除。接着返回 list 的大小即可。注:因为这里经常删除,所以用 LinkedList 的效率会更高一些 (ArrayList 会挪动元素)。并且删除要用 iterator 迭代器来删除,否则会引发 ConcurrentModificationException。java ac 代码:
class RecentCounter {
List<Integer>list = new LinkedList();
public RecentCounter() {
}
public int ping(int t) {
list.add(t);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext())
{
Integer a = iterator.next();
if(t-a > 3000)
iterator.remove();
else break;
}
return list.size();
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.ping(t);
*/