less than 1 minute read

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)