力扣 933. 最近的請求次數 難度:簡單
題目
寫一個RecentCounter類來計算特定時間範圍內最近的請求。
請你實現 RecentCounter 類:
RecentCounter() 初始化計數器,請求數為 0 。
int ping(int t) 在時間 t 新增一個新請求,其中 t 表示以毫秒為單位的某個時間,並返回過去 3000 毫秒內發生的所有請求數(包括新請求)。確切地說,返回在 [t-3000, t] 內發生的請求數。
保證 每次對 ping 的呼叫都使用比之前更大的 t 值。
示例:
輸入:
["RecentCounter", "ping", "ping", "ping", "ping"]
[[], [1], [100], [3001], [3002]]
輸出:
[null, 1, 2, 3, 3]
解釋:
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1); // requests = [1],範圍是 [-2999,1],返回 1
recentCounter.ping(100); // requests = [1, 100],範圍是 [-2900,100],返回 2
recentCounter.ping(3001); // requests = [1, 100, 3001],範圍是 [1,3001],返回 3
recentCounter.ping(3002); // requests = [1, 100, 3001, 3002],範圍是 [2,3002],返回 3
提示:
1 <= t <= 109
保證每次對 ping 呼叫所使用的 t 值都 嚴格遞增
至多呼叫 ping 方法 104 次
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/number-of-recent-calls
解題思路
這道題意是呼叫ping方法,然後返回時間t-3000內,一共請求的次數,直接使用佇列就可以解決,然後遍歷佇列,只要彈出的時間<t-3000就刪除,最後返回佇列數量即可。
程式碼
1 class RecentCounter { 2 Queue<Integer> queue ; 3 publicRecentCounter() { 4 queue = new LinkedList(); 5 } 6 7 public int ping(int t) { 8 queue.add(t); 9 10 while( queue.peek() < t-3000){ 11 queue.poll(); 12 } 13 return queue.size(); 14 } 15 }
本文來自部落格園,作者:宗神一,轉載請註明原文連結:https://www.cnblogs.com/zhangmuchen/p/15724464.html