-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0933_number_of_recent_calls.java
More file actions
80 lines (60 loc) · 2.42 KB
/
0933_number_of_recent_calls.java
File metadata and controls
80 lines (60 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* https://leetcode-cn.com/problems/number-of-recent-calls/
写一个 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]
提示:
1. 每个测试用例最多调用 10000 次 ping。
2. 每个测试用例会使用严格递增的 t 值来调用 ping。
3. 每次调用 ping 都有 1 <= t <= 10^9。
-----------------------------------------------------------------------------------------------------------
Write a class RecentCounter to count recent requests.
It has only one method: ping(int t), where t represents some time in milliseconds, return the number of pings that have been made from 3000 milliseconds ago until now.
Any ping with time in [t - 3000, t] will count, including the current ping.
It is guaranteed that every call to ping uses a strictly larger value of t than before.
Example 1:
Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
Output: [null,1,2,3,3]
Note:
1. Each test case will have at most 10000 calls to ping.
2. Each test case will call ping with strictly increasing values of t.
3. Each call to ping will have 1 <= t <= 10^9.
*/
class MyRecentCounter {
private Queue<Integer> q;
public RecentCounter() {
q = new LinkedList<>();
}
public int ping(int t) {
while (!q.isEmpty() && q.peek() < t - 3000) {
q.poll();
}
q.offer(t);
return q.size();
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.ping(t);
*/
class RecentCounter1 {
public RecentCounter() {
}
private Deque<Integer> queue = new ArrayDeque<>();
public int ping(int t) {
while (!queue.isEmpty()) {
Integer tt = queue.removeFirst();
if (t - 3000 <= tt) {
queue.addFirst(tt);
break;
}
}
queue.add(t);
return queue.size();
}
}