All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0901_1000.s0933_number_of_recent_calls.RecentCounter Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0901_1000.s0933_number_of_recent_calls;

// #Easy #Design #Queue #Data_Stream #2022_03_30_Time_16_ms_(97.58%)_Space_50.8_MB_(80.12%)

import java.util.LinkedList;
import java.util.Queue;

/**
 * 933 - Number of Recent Calls\.
 *
 * Easy
 *
 * 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`.
**/
public class RecentCounter {
    private Queue q;

    public RecentCounter() {
        q = new LinkedList<>();
    }

    public int ping(int t) {
        q.offer(t);
        int min = t - 3000;
        while (min > q.peek()) {
            q.poll();
        }
        return q.size();
    }
}

/*
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter obj = new RecentCounter();
 * int param_1 = obj.ping(t);
 */




© 2015 - 2025 Weber Informatics LLC | Privacy Policy