Number of Recent Calls - LeetCode
일정 시간 동안 최근 요청의 수를 계산하는 RecentCounter 클래스가 있습니다.
RecentCounter 클래스를 구현하세요:
- RecentCounter() : 최근 요청을 0으로 초기화합니다.
- int ping(int t) : 시간 t에서의 새로운 요청을 추가하고, t는 밀리초 단위의 어떤 시간을 나타냅니다. 과거 3000 밀리초 동안 발생한 요청의 수를 반환합니다 (새로운 요청 포함). 구체적으로, [t - 3000, t]의 범위 내에서 발생한 요청의 수를 반환합니다.
이전 호출보다 항상 더 큰 t 값을 사용하는 것이 보장됩니다.
You have a RecentCounter class which counts the number of recent requests within a certain time frame.
Implement the RecentCounter class:
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
풀이과정 설명:
요청을 저장하는 큐를 사용합니다.
ping 메서드가 호출될 때마다 큐에 현재 시간을 추가합니다.
큐에서 3000 밀리초 이전의 요청을 제거합니다.
큐의 길이를 반환합니다.
class RecentCounter {
Queue<Integer> queue;
public RecentCounter() {
queue = new LinkedList<>();
}
public int ping(int t) {
queue.offer(t);
while(!queue.isEmpty() && queue.peek() < t - 3000){
queue.poll();
}
return queue.size();
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.ping(t);
*/
206. Reverse Linked List (0) | 2023.11.18 |
---|---|
649. Dota2 Senate (0) | 2023.11.18 |
735. Asteroid Collision (0) | 2023.11.16 |
2390. Removing Stars From a String (0) | 2023.11.16 |
1657. Determine if Two Strings Are Close (0) | 2023.11.13 |