239. 滑动窗口最大值
class Solution {
class MyQueue{
Deque<Integer> deque = new LinkedList<>();
// 弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出
public void poll(int val){
if(!deque.isEmpty()&&val==deque.peek()){
deque.poll();
}
}
// 添加元素时,如果要添加的元素大于入口处元素,就将入口处元素弹出
// 保证队列 大-》小
public void add(int val){
while(!deque.isEmpty()&& val>deque.peek()){
deque.removeLast();
}
deque.add(val);
}
// 得到队首元素,此时队首元素就是最大的
public int peek(){
return deque.peek();
}
}
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums.length==1){
return nums;
}
int len = nums.length-k+1;
// 存放结果数组 num是填充时的指针
int[] res = new int[len];
int num = 0;
//自定义队列
MyQueue myQueue = new MyQueue();
//先将前K个元素放入队列
for(int i = 0; i < k; i++){
myQueue.add(nums[i]);
}
res[num++] = myQueue.peek(); //这是加的第一个元素
for(int i = k;i < nums.length; i++){
// 移除滑动窗口最前面元素
myQueue.poll(nums[i-k]);
//滑动窗口加入下一个元素
myQueue.add(nums[i]);
// 记录此时最大的元素
res[num++] = myQueue.peek();
}
return res;
}
}
作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)