【LeetCode刷题-滑动窗口】-- 239.滑动窗口最大值

239.滑动窗口最大值

image-20231118191937241

分析:

image-20231118192024119

方法:优先队列

对于最大值,可以使用优先队列(堆),其中的大根堆可以帮助实时维护一系列元素中的最大值

在本题中,初始时,将数组nums的前k个元素放入优先队列中,每当我们向右移动窗口时,我们就可以把一个新的元素放入优先队列中,此时堆顶的元素就是堆中所有元素的最大值,然而这个最大值可能并不在滑动窗口中,在这种情况下,这个值在数组nums中的位置出现在滑动窗口左边界的左侧,因此我们后续继续向右移动滑动窗口,这个值就永远不可能出现在滑动窗口中了,就可以将其永久地从优先队列中移除

不断移除堆顶的元素,直到其确实出现在滑动窗口中,此时堆顶元素就是滑动窗口中的最大值,为了方便判断堆顶元素与滑动窗口的关系,可以在优先队列中存储二元组(num,index),表示元素num在数组的下标为index

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;//1.优先队列存放的是二元组(num,index):大顶堆(元素大小不同按元素大小排列,元素大小相同按下标进行排列)PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){public int compare(int[] pair1,int[] pair2){return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];}});//2.优先队列初始化:k个元素的堆for(int i = 0;i<k;i++){pq.offer(new int[]{nums[i],i});}//3.处理堆逻辑int[] res = new int[n - k + 1];  //初始化结果数组长度:一共有n - k + 1个窗口res[0] = pq.peek()[0];   //初始化res[0]:拿出目前堆顶的元素for(int i = k;i<n;i++){   //向右移动滑动窗口pq.offer(new int[]{nums[i],i});   //加入大顶堆种while(pq.peek()[1] <= i - k){   //将下标不在滑动窗口中的元素都移除pq.poll();         //维护:堆的大小就是滑动窗口的大小}res[i - k + 1] = pq.peek()[0];  //此时堆顶元素就是滑动窗口的最大值}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/193104.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

碳交易机制下考虑需求响应的综合能源系统优化运行程序代码!

本程序参考论文《碳交易机制下考虑需求响应的综合能源系统优化运行》&#xff0c;程序中算例丰富&#xff0c;注释清晰&#xff0c;下面对文章和程序简要介绍。 综合能源系统是实现“双碳”目标的有效途径&#xff0c;为进一步挖掘其需求侧可调节潜力对碳减排的作用&#xff0c…

云课五分钟-0ALinux文件系统及权限-查询命令如何使用

前篇&#xff1a; 云课五分钟-09Linux基础命令实践-AI助力快速入门 视频&#xff1a; 云课五分钟-0ALinux文件系统及权限-查询命令如何使用 文本&#xff1a; Linux文件系统及权限示例教程&#xff08;Ubuntu&#xff09; 一、Linux文件系统基础 在Linux中&#xff0c;一切…

项目踩坑之面试遇到的问题及解决

第一点&#xff1a; 问题 遇到的问题之&#xff1a;在实现后台管理端-账户操作的时候&#xff0c;添加员工的时候如果重复添加同一个员工&#xff0c;会触发一个数据库唯一约束异常&#xff0c;但客户端无法清晰的理解这个错误&#xff0c;所以我们就对新增员工的代码进行try…

shopee选品工具:Shopee选品工具—知虾精准选品与科学运营的利器

在如今竞争激烈的电商市场中&#xff0c;如何进行精准选品和科学运营成为了每个卖家都需要面对的问题。而Shopee选品工具——知虾&#xff0c;作为一款强大的大数据采集及分析平台&#xff0c;为卖家提供了全面的市场分析、产品分析和店铺分析功能&#xff0c;帮助卖家发现市场…

MySQL的执行器是怎么工作的

作为优化器后的真正执行语句的层&#xff0c;执行器有三种方式和存储引擎&#xff08;一般是innoDB&#xff09;交互 主键索引查询 查询的条件用到了主键&#xff0c;这个是全表唯一的&#xff0c;优化器会选择const类型来查询&#xff0c;然后while循环去根据主键索引的B树结…

75基于matlab的模拟退火算法优化TSP(SA-TSP),最优路径动态寻优,输出最优路径值、路径曲线、迭代曲线。

基于matlab的模拟退火算法优化TSP(SA-TSP)&#xff0c;最优路径动态寻优&#xff0c;输出最优路径值、路径曲线、迭代曲线。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 75matlab模拟退火算法TSP问题 (xiaohongshu.com)

YOLOv8-seg改进:注意力系列篇 | 一种简单有效的可变形的自注意力模块DAT | CVPR 2022

🚀🚀🚀本文改进:Deformable Attention Transformer,一种简单有效的可变形的自注意力模块,增强sparse attention 的表征能⼒; 🚀🚀🚀DAT小目标分割&复杂场景首选,实现涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOL…

剑指JUC原理-19.线程安全集合

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

WMS重力式货架库位对应方法

鉴于重力式货架的特殊结构和功能&#xff0c;货物由高的一端存入&#xff0c;滑至低端&#xff0c;从低端取出。所以重力式货架的每个货位在物理上都会有一个进货口和一个出货口。因此&#xff0c;在空间上&#xff0c;对同一个货位执行出入库操作需要处于不同的位置。 比如对…

敏捷开发中如何写好用户故事

写好用户故事是敏捷开发中非常重要的一环&#xff0c;它们是描述用户需求的核心。以下是一些关于如何编写优秀用户故事的建议&#xff1a; 使用标准模板&#xff1a; 一个常用的用户故事模板是“As a [用户角色]&#xff0c;I want [功能]&#xff0c;so that [价值]”。这种模…

VisualGDB 6.0 R2 Crack

轻松跨平台"VisualGDB 使 Visual Studio 的跨平台开发变得简单、舒适。它支持&#xff1a; 准系统嵌入式系统和物联网模块&#xff08;查看完整列表&#xff09; C/C Linux 应用程序 本机 Android 应用程序和库 Raspberry Pi 和其他Linux 板 Linux 内核模块&#xff08;单…

22 - 如何优化垃圾回收机制?

我们知道&#xff0c;在 Java 开发中&#xff0c;开发人员是无需过度关注对象的回收与释放的&#xff0c;JVM 的垃圾回收机制可以减轻不少工作量。但完全交由 JVM 回收对象&#xff0c;也会增加回收性能的不确定性。在一些特殊的业务场景下&#xff0c;不合适的垃圾回收算法以及…