Leetcode算法实战「最近的请求次数」队列应用
最近的请求次数
leavel:easy
题目给了3000的窗口,并且关键信息为 请求t的数值逐渐增大,窗口是不断的右移的,尾部的元素不断被抛弃,先进先出的特点就可联想到队列。
class RecentCounter {
// 关键信息: 每次对 ping 的调用都使用比之前更大的 t 值。
// 无远虑 有近忧
/**
1 -2999 1
2 -2998 2 窗口为3000
[old last ]
n 为锚点 统计之前3000范围内的标的 ping的次数至少为1
---> 窗口 ----> 队列维护窗口 --->大小即答案
可以维护一个队列
*/
Deque<Integer> dq = new LinkedList<Integer>();
public RecentCounter() {
}
public int ping(int t) {
dq.offer(t); // 入队
while(dq.peek() < t-3000){
// 如果不在范围内,把队尾部元素弹出
dq.pop();
}
return dq.size();
}
}
/**
* Your RecentCounter object will be instantiated and called as such:
* RecentCounter obj = new RecentCounter();
* int param_1 = obj.ping(t);
*/