leetcode-933-Number-of-Recent-Calls

描述


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:

1
2
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.

分析


调用 ping 的时候会给定时间,求过去的 3000 ms 内 ping 的次数,可以用队列来记录 ping。

解决方案1(Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class RecentCounter {
Queue<Integer> queue;
public RecentCounter() {
queue = new LinkedList();
}

public int ping(int t) {
queue.add(t);
while(queue.peek() < t - 3000) {
queue.poll();
}
return queue.size();
}
}

解决方案2(Python3)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class RecentCounter:

def __init__(self):
self.queue = collections.deque()

def ping(self, t):
"""
:type t: int
:rtype: int
"""
self.queue.append(t)
while self.queue[0] < t - 3000:
self.queue.popleft()
return len(self.queue)

题目来源