Solving Leetcode Interviews in Seconds with AI: Number of Recent Calls
Introduction
In this blog post, we will explore how to solve the LeetCode problem "933" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
You have a RecentCounter class which counts the number of recent requests within a certain time frame. Implement the RecentCounter class: RecentCounter() Initializes the counter with zero recent requests. int ping(int t) Adds a new request at time t, where t represents some time in milliseconds, and returns the number of requests that has happened in the past 3000 milliseconds (including the new request). Specifically, return the number of requests that have happened in the inclusive range [t - 3000, t]. 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 Constraints: 1 <= t <= 109 Each test case will call ping with strictly increasing values of t. At most 104 calls will be made to ping.
Explanation
- Use a Queue: Maintain a queue to store the timestamps of recent requests.
- Evict Old Requests: Before adding a new request, remove any requests from the front of the queue that are outside the [t - 3000, t] window.
- Return Queue Size: The number of requests within the time frame is simply the size of the queue.
- Runtime Complexity: O(N) where N is the number of calls to ping (due to potentially dequeuing all elements). Although in practice, the average runtime should be closer to O(1). Storage Complexity: O(W) where W is the maximum number of requests within a 3000ms window.
Code
from collections import deque
class RecentCounter:
def __init__(self):
self.requests = deque()
def ping(self, t: int) -> int:
self.requests.append(t)
while self.requests[0] < t - 3000:
self.requests.popleft()
return len(self.requests)