Leetcode刷題之 【最近的請求次數】
1 題目
寫一個 RecentCounter 類來計算特定時間範圍內最近的請求。
請你實現 RecentCounter 類:
RecentCounter() 初始化計數器,請求數為 0 。
int ping(int t) 在時間 t 新增一個新請求,其中 t 表示以毫秒為單位的某個時間,並返回過去 3000 毫秒內發生的所有請求數(包括新請求)。確切地說,返回在 [t-3000, t] 內發生的請求數。
保證每次對 ping 的呼叫都使用比之前更大的 t 值。
示例 1:
輸入: [“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 <= 104 保證每次對 ping 的呼叫都使用比之前更大的 t 值
- 至多呼叫 ping 方法 104 次
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/number-of-recent-calls
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
2 Java程式碼
(1)暴力破解(會超時)
class RecentCounter{
private List<Integer> count = new ArrayList<>();
public RecentCounter() {
}
public int ping(int t) {
int min = t-3000;
int to = 1;
for (int i = 0; i < this.count.size(); i++) {
if (this.count.get(i) >= min)
to++;
}
this.count.add(t);
return to;
}
}
(2)使用佇列實現
import java.util.*;
public class RecentCounter {
private Queue<Integer> count = new LinkedList<>();
public RecentCounter() {
}
public int ping(int t) {
/*
如果佇列中的ping值超出時間限制(大於3000毫秒),則將其移除佇列
*/
while (!this.count.isEmpty() && t-this.count.peek()>3000)
this.count.poll();
this.count.add(t);
return this.count.size();
}
public static void main(String[] args) {
RecentCounter recentCounter = new RecentCounter();
System.out.println(recentCounter.ping(1));
System.out.println(recentCounter.ping(100));
System.out.println(recentCounter.ping(3001));
System.out.println(recentCounter.ping(3002));
}
}
相關文章
- Leetcode刷題——求眾數LeetCode
- 實時監控.NET Core請求次數:建立記錄最近5分鐘的請求,輕鬆可靠
- LeetCode刷題之第701題LeetCode
- 關於兩次http請求,後一次請求影響前一次請求的問題HTTP
- 1s內控制向某個請求請求的次數
- [LeetCode 刷題] 1. 兩數之和LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- 【LeetCode刷題筆記(四十二)】之 1025. 除數博弈LeetCode筆記
- 「翻轉字串」python之leetcode刷題|004字串PythonLeetCode
- leetcode 刷題之深度優先搜尋LeetCode
- #leetcode刷題之路1-兩數之和LeetCode
- 【LeetCode刷題】896. 單調數列LeetCode
- LeetCode 刷題—樹LeetCode
- LeetCode刷題 堆LeetCode
- LeetCode刷題整理LeetCode
- leetcode刷題(一)LeetCode
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- 有趣的請求引數/請求頭
- 關於在request請求時,處理請求引數的問題
- Leetcode刷題628. 三個數的最大乘積LeetCode
- 【LeetCode刷題】509. 斐波那契數LeetCode
- LeetCode刷題記錄LeetCode
- leetcode刷題筆記LeetCode筆記
- 如何使用leetcode刷題LeetCode
- Leetcode刷題分類LeetCode
- LeetCode 刷題筆記LeetCode筆記
- Leetcode刷題準備LeetCode
- LeetCode刷題—陣列LeetCode陣列
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- LeetCode 刷題指南(一):為什麼要刷題LeetCode
- 【leetcode】求眾數LeetCode
- Leetcode 刷題 ------1365.有多少小於當前數字的數字LeetCode
- leetcode刷題記錄 661~LeetCode
- leetcode刷題筆記605LeetCode筆記
- Leetcode刷題系列彙總LeetCode
- 「判斷路線成圈」python之leetcode刷題|005PythonLeetCode
- java請求頻次控制Java