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.
?
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
From: LeetCode
Link: 933. Number of Recent Calls
typedef struct {
int *requests; // Array to store the timestamps of requests
int size; // Current number of requests stored
int capacity; // Total capacity of the array
} RecentCounter;
RecentCounter* recentCounterCreate() {
RecentCounter* obj = (RecentCounter*) malloc(sizeof(RecentCounter));
obj->capacity = 10; // Initial capacity
obj->size = 0;
obj->requests = (int*) malloc(obj->capacity * sizeof(int));
return obj;
}
// Helper function to resize the array if needed
void resizeIfNeeded(RecentCounter* obj) {
if (obj->size >= obj->capacity) {
obj->capacity *= 2;
obj->requests = (int*) realloc(obj->requests, obj->capacity * sizeof(int));
}
}
int recentCounterPing(RecentCounter* obj, int t) {
// Resize the array if needed
resizeIfNeeded(obj);
// Add the new request
obj->requests[obj->size++] = t;
// Calculate the minimum acceptable time
int minTime = t - 3000;
// Count requests within the time frame
int count = 0;
for (int i = 0; i < obj->size; ++i) {
if (obj->requests[i] >= minTime) {
++count;
}
}
return count;
}
void recentCounterFree(RecentCounter* obj) {
free(obj->requests);
free(obj);
}
/**
* Your RecentCounter struct will be instantiated and called as such:
* RecentCounter* obj = recentCounterCreate();
* int param_1 = recentCounterPing(obj, t);
* recentCounterFree(obj);
*/