239. 滑动窗口最大值(leetcode)
https://leetcode.cn/problems/sliding-window-maximum/
简单的滑动窗口,但是与ACM模式的维护数组不同,在leetcode定义单调队列类更加方便
class MyQueue{
// 单调队列实现,递减
Deque<Integer> deque = new LinkedList<>();
void poll(int val) {
if (!deque.isEmpty() && val == deque.peek()) {
deque.poll();
}
}
void add(int val){
while(!deque.isEmpty() && deque.getLast() < val){
deque.removeLast();
}
deque.add(val);
}
int peek(){
return deque.peek();
}
}
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int n = nums.length;
int[] res = new int[n-k+1];
int len=0;
MyQueue q = new MyQueue();
for(int i=0;i<k;i++)q.add(nums[i]);
res[len++]=q.peek();
for (int i = k; i < nums.length; i++) {
// 移除队尾,若该元素仍在队列中则移除
q.poll(nums[i - k]);
// 加入队列,移除队列中比该元素小的,保持单调
q.add(nums[i]);
res[len++] = q.peek();
}
return res;
}
}
分类:
算法 / leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】