Problem Statement
leetcode problem link
My Solution [Accepted]
public class RecentCounter {
public Queue<int> queue {get;set;}
public RecentCounter() {
queue = new Queue<int>();
}
public int Ping(int t) {
queue.Enqueue(t);
var startTime = t - 3000;
while (queue.Count > 0 && queue.Peek() < startTime) {
queue.Dequeue();
}
return queue.Count;
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.Ping(t);
*/
Editorial
Approach 1: Iteration over Sliding Window
class RecentCounter:
def __init__(self):
self.slide_window = deque()
def ping(self, t: int) -> int:
# step 1). append the current call
self.slide_window.append(t)
# step 2). invalidate the outdated pings
while self.slide_window[0] < t - 3000:
self.slide_window.popleft()
return len(self.slide_window)