[LeetCode] 933. Number of Recent Calls

You have a RecentCounter class which counts the number of recent requests within a certain time frame.

Implement the RecentCounter class:

  • RecentCounter() Initializes the counter with zero recent requests.
  • int ping(int t) Adds a new request at time t, where t represents some time in milliseconds, and returns the number of requests that has happened in the past 3000 milliseconds (including the new request). Specifically, return the number of requests that have happened in the inclusive range [t - 3000, t].

It is guaranteed that every call to ping uses a strictly larger value of t than the previous call.

Example 1:

Input
["RecentCounter", "ping", "ping", "ping", "ping"]
[[], [1], [100], [3001], [3002]]
Output
[null, 1, 2, 3, 3]

Explanation
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1);     // requests = [1], range is [-2999,1], return 1
recentCounter.ping(100);   // requests = [1, 100], range is [-2900,100], return 2
recentCounter.ping(3001);  // requests = [1, 100, 3001], range is [1,3001], return 3
recentCounter.ping(3002);  // requests = [1, 100, 3001, 3002], range is [2,3002], return 3

Constraints:

  • 1 <= t <= 104
  • Each test case will call ping with strictly increasing values of t.
  • At most 104 calls will be made to ping.

最近的请求次数。

写一个 RecentCounter 类来计算特定时间范围内最近的请求。

请你实现 RecentCounter 类:

RecentCounter() 初始化计数器,请求数为 0 。
int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
保证每次对 ping 的调用都使用比之前更大的 t 值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-recent-calls
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题跟362题几乎没有区别,给的ping就是一个timestamp,需要你返回的是最近的3000ms内出现过的timestamp都有哪些。思路还是会用到queue。

时间O(n)

空间O(n)

Java实现

 1 class RecentCounter {
 2     Queue<Integer> queue;
 3 
 4     public RecentCounter() {
 5         queue = new LinkedList<>();
 6     }
 7 
 8     public int ping(int t) {
 9         queue.offer(t);
10         while (queue.peek() < t - 3000) {
11             queue.poll();
12         }
13         return queue.size();
14     }
15 }
16 
17 /**
18  * Your RecentCounter object will be instantiated and called as such:
19  * RecentCounter obj = new RecentCounter();
20  * int param_1 = obj.ping(t);
21  */

相关题目

362. Design Hit Counter

933. Number of Recent Calls

LeetCode 题目总结

原文地址:https://www.cnblogs.com/cnoodle/p/13759634.html