Write a classRecentCounterto count recent requests.

It has only one method: ping(int t), where t represents some time in milliseconds.

Return the number ofpings that have been made from 3000 milliseconds ago until now.

Any ping with time in[t - 3000, t]will count, including the current ping.

It is guaranteed that every call topinguses a strictly larger value of tthan before.

Example 1:

Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
Output: [null,1,2,3,3]

Note:

  1. Each test case will have at most10000calls toping.
  2. Each test case will call pingwith strictly increasing values oft.
  3. Each call to ping will have1 <= t <= 10^9 .

这个题也比较直接,用一个queue就可以了,每次把最新的ping加入队列,去掉早于t - 3000的时间,输出queue size

class RecentCounter {
    private LinkedList<Integer> queue;

    public RecentCounter() {
        this.queue = new LinkedList<Integer>();
    }

    public int ping(int t) {
        queue.offer(t);
        while(queue.peek() < t - 3000)
            queue.poll();

        return queue.size();
    }
}

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

results matching ""

    No results matching ""