news 2026/8/27 20:32:45

关于力扣第239题的题解【滑动窗口最大值】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于力扣第239题的题解【滑动窗口最大值】

摘要:本文详细解析力扣第 239 题「滑动窗口最大值」的解法,核心思路是采用滑动窗口 + 单调队列。遍历数组时,我们维护一个双端队列(Deque),并始终保持队首为当前窗口的最大值。每当加入新元素前,先移除队尾所有比它小的元素,使队列保持单调递减;同时剔除已滑出窗口的队首元素,从而在 O(n) 时间内求出每个窗口的最大值。文中附有完整的 Java 代码实现,并整理了 Deque 常用方法对照表,帮助读者快速掌握单调队列的写法与原理。

关于力扣第239题的题解【滑动窗口最大值】

classSolution{publicint[]maxSlidingWindow(int[]nums,intk){int[]res=newint[nums.length+1-k];Deque<Integer>queue=newLinkedList();for(inti=0;i<nums.length;i++){// ① 移除队尾所有比当前元素小的元素while(!queue.isEmpty()&&nums[queue.peekLast()]<nums[i]){queue.pollLast();// 从队尾移除}// ② 将当前索引加入队尾queue.offerLast(i);// ③ 移除窗口外的队首元素if(queue.peek()<i+1-k){queue.poll();// 从队首移除}// ④ 记录窗口最大值if(i+1>=k){res[i+1-k]=nums[queue.peek()];// 队首就是最大值}}returnres;}}

本题使用的是滑动窗口+队列的解法,首先直接遍历整个数组,当遇到一个当前元素比之前的元素大时,这个元素一定是当前窗口的最大值,那么就可以直接把之前的元素全都移除,并将这个元素作为新的队尾元素。
而当位于队友的元素也就是数组下标已经离开窗口范围的时候,应该直接移除该元素,并且之后最大的元素一定是队首【因为每次加入新元素时,都会判断一次,如果新元素大于队首,就一定会把原来的队首移除,如果没有顶替原来的队首,那么新元素一定比队首小。】

以下是队列的基础代码

方法作用操作位置
offerFirst(e)在队首插入元素头部
offerLast(e)在队尾插入元素尾部
peekFirst()查看队首元素(不删除)头部
peekLast()查看队尾元素(不删除)尾部
pollFirst()移除并返回队首元素头部
pollLast()移除并返回队尾元素尾部
offer(e)等同于offerLast(e)尾部
peek()等同于peekFirst()头部
poll()等同于pollFirst()头部
isEmpty()判断队列是否为空
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 20:31:04

【Unity小白学习日记2】数据结构必考知识点 | 冒泡、选择、插入排序

1、冒泡排序核心思路描述重复遍历数组&#xff0c;相邻两个元素两两比较&#xff0c;前大于后就交换。每一轮会把未排序区间最大元素 “冒泡” 到末尾。增加交换标记优化&#xff0c;如果一轮没有发生交换&#xff0c;说明数组已经有序&#xff0c;可以直接结束。关键 C# 代码/…

作者头像 李华
网站建设 2026/8/27 20:29:08

高并发服务的权限边界如何划分

高并发服务的权限边界如何划分权限边界从资产、调用方和失败后果出发设计&#xff1b;接口方便性不能取代最小权限原则。 Go 的 context.Context 用来传递取消、截止时间和请求范围内的值。它不会自动携带 Authorization Header&#xff0c;但项目代码可能把用户 Claims 或其他…

作者头像 李华
网站建设 2026/8/27 20:28:45

从设备接入到OTA升级:一套可落地的IoT产品组合服务实践

1. 项目背景与核心价值 做IoT产品这行最怕什么&#xff1f;不是硬件不稳定&#xff0c;不是云端架构不够先进&#xff0c;而是你辛辛苦苦做出来的一套东西&#xff0c;客户用不起来&#xff0c;或者用着用着就出各种幺蛾子。我这次梳理的项目&#xff0c;核心是一套完整的IoT产…

作者头像 李华
网站建设 2026/8/27 20:25:49

GigE Vision 详解 · 05:Bootstrap 寄存器与标准特性(§36~37)

GigE Vision 详解 05:Bootstrap 寄存器与标准特性(36~37) 覆盖 GigE Vision 3.0 第 36~37 章:Bootstrap 寄存器映射、相机标准特性列表。 前面反复出现的 0x0010、0x0024、SCPS0、RSCCTL0……这一篇给你一张完整的地图,并讲清「主机怎么用 READREG 读它们」。 一、Bootst…

作者头像 李华