1. 程式人生 > >[LeetCode] 933. Number of Recent Calls

[LeetCode] 933. Number of Recent Calls

題:https://leetcode.com/contest/weekly-contest-109/problems/number-of-recent-calls/

題目

Write a class RecentCounter to count recent requests.

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

Return the number of pings 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 to ping uses a strictly larger value of t than 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 most 10000 calls to ping.
  2. Each test case will call ping with strictly increasing values of t.
  3. Each call to ping will have 1 <= t <= 10^9.

題目大意

保留ping 中 與最新記錄差小於3000的記錄。

思路

利用佇列,檢視隊頭與最新時間的差值。

class RecentCounter {
    Queue<Integer> queue ;

    public
RecentCounter() { queue= new LinkedList<>(); } public int ping(int t) { while(!queue.isEmpty() && (t - queue.peek())>3000) queue.poll(); queue.add(t); return queue.size(); } } /** * Your RecentCounter object will be instantiated and called as such: * RecentCounter obj = new RecentCounter(); * int param_1 = obj.ping(t); */

可以避免判斷 queue.isEmpty()

class RecentCounter {
    Queue<Integer> queue ;

    public RecentCounter() {
        queue= new LinkedList<>();

    }
    
    public int ping(int t) {
        queue.add(t);
        while((t - queue.peek())>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);
 */