560.滑动窗口最大值

滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode)

题目大意,返回每个窗口内的最大值。

在这里插入图片描述

思路-优先队列

优先队列(堆),其中的大根堆可以实时维护一系列元素中的最大值。

每当我们向右移动窗口时,我们就可以把一个新的元素放入优先队列中,此时堆顶的元素就是堆中所有元素的最大值。然而这个最大值可能并不在滑动窗口中,我们不断地移除堆顶的元素,直到其确实出现在滑动窗口中。

时间复杂度:O(nlogn)。在最坏情况下,数组 nums 中的元素单调递增,那么最终优先队列中包含了所有元素,没有元素被移除。维护优先队列的时间复杂度为 O(logn),因此总时间复杂度为 O(nlogn)

空间复杂度:O(n),即为优先队列需要使用的空间。

代码

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {// 优先队列,保存值和下标,按值维护大根堆priority_queue<pair<int, int>> q;vector<int> res;int n = nums.size();for(int i = 0; i < n; i ++) {// 加入堆q.push({nums[i], i});// 如果这个最大值已经是之前窗口的,就丢弃while (q.top().second <= i - k) {q.pop();}// 每次保存当前最大的数if(i >= k - 1)res.push_back(q.top().first);}return res;}
};

思路-单调队列

  • 一个窗口内最需要关注的就只有最大值。比如窗口[1 3 -1]中,我们只关注最大值3。换句话说,对于1-1来说,因为窗口内存在比他大的数,那他们本身其实在本窗口没什么作用。

    既然其他的没什么作用,那只需要保存最大值其他值就不管咯?

    也不是,因为这些值可能在后面的窗口有作用。比如,上述[1 3 -1]的下两个窗口假如是[-1 -3 -5],那-1就是最大值了。

  • 考虑后续多个窗口,则需要降序维护多个“最大值”。如上所述,结合窗口内的最大值才被关注有比我大的值我就需要隐忍(避其锋芒,暂居幕后)可以分析出这题适合使用单调队列。

单调队列中维护现在能用到或将来能用到的“最大值们”,最多k个,空间复杂度为O(k)

遍历数组每个元素一次,维护单调队列(每个元素最多入队出队一次),时间复杂度为O(n + n),即O(n)

代码

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {// 单调双端队列, 按实际值递减存储// 保存的是下标deque<int> d;vector<int> res;int n = nums.size();for(int i = 0; i < n; i ++) {// 判断队列维护的跨度是否超过k了。超过了代表是之前窗口的元素,已经用不到了if(d.size() && i - d.front() >= k)d.pop_front();// 把比自己小的数都踢出去,因为只要自己在,就轮不到比他小别的当大哥// 一样大的踢不踢都行while(d.size() && nums[d.back()] < nums[i]) {d.pop_back();}d.push_back(i);// 每次保存当前最大的数if(i >= k - 1)res.push_back(nums[d.front()]);}return res;}
};

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

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

相关文章

地形沉降测量仪器静力水准仪应用全攻略

在地形监测和地质勘探的领域中&#xff0c;地形沉降测量是一项至关重要的工作。它不仅能够及时揭示地质结构的变化&#xff0c;还能为城市规划和基础工程建设提供宝贵的数据支持。在众多测量工具中&#xff0c;静力水准仪以其高精度、高效率的特点&#xff0c;成为地形沉降测量…

AI绘画生成人物的关键词怎么写?手把手教你学会

AI绘画生成人物的关键词怎么写&#xff1f;随着人工智能技术的不断发展&#xff0c;AI绘画已成为艺术领域的一股新势力。特别是在生成人物绘画方面&#xff0c;AI技术以其独特的优势和无限的可能性&#xff0c;为我们带来了全新的创作体验。下面&#xff0c;本文将分享AI绘画生…

svn怎么新建分支,切换分支

在当前分支下&#xff0c;点svn右键&#xff0c;选择分支/标记 在选择远端地址时&#xff0c;点右边更多选项&#xff0c;打开远端版本库。找到对应的分支上级位置&#xff0c;点击确定 填写新分支名称&#xff0c;我这儿是将分支建在了branches下&#xff0c;分支名称为V1.1 填…

【MLP-BEV(7)】深度的计算。针孔相机和鱼眼相机对于深度depth的采样一个是均匀采样,一个是最大深度均匀采样

文章目录 1.1 问题提出1.1 看看DD3D 的深度是怎么处理的给出代码示例 1.2 我们看看BEVDepth的代码 1.1 问题提出 针孔相机和鱼眼相机的投影模型和畸变模型不一样&#xff0c;如果对鱼眼的模型不太了解可以到我的这篇博客【鱼眼镜头11】Kannala-Brandt模型和Scaramuzza多项式模…

vscode刷LeetCode算法题环境配置

首先&#xff0c;下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了

【Linux】进程优先级 | 环境变量

目录 Ⅰ. 进程优先级&#xff08;Process Priority&#xff09; 1. 什么是进程优先级&#xff1f; 2. 查看系统进程 3. 修改进程优先级 4.优先级调度原理 Ⅱ. 进程的切换&#xff08;Process Switch&#xff09; 1. 竞争与独立 2. 并行与并发 3. 进程抢占 4.实现切换…

鸿蒙期末项目(完结)

两天仅睡3个小时的努力奋斗之下&#xff0c;终于写完了这个无比拉跨的项目&#xff0c;最后一篇博客总体展示一下本项目运行效果兼测试&#xff0c;随后就是答辩被同学乱沙&#xff08;悲 刚打开软件&#xff0c;会看到如下欢迎界面&#xff0c;介绍本app的功能和优点 随后我们…

在线开发、实时交互 | 三维天地低代码开发平台助力提高项目交付速度

1.什么是低代码开发平台? 低代码开发平台基于北京三维天地科技股份有限公司自研原生技术架构研发。三维天地作为国内知名的检验检测信息化领域软件开发服务商,拥有多项自主知识产权及自主研发核心技术,致力于为客户提供信息化整体解决方案及相关软件产品与服务。 三维天地低…

【包邮送书】深度学习与信号处理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

视觉震撼背后:带宽对渲染农场的重要性

在这个注重视觉体验的时代&#xff0c;无论是电影、电子游戏还是虚拟现实&#xff08;VR&#xff09;&#xff0c;令人印象深刻的视觉效果都依赖于渲染农场的强大能力。而带宽&#xff0c;则是确保这些画面能够迅速且以高清晰度传递给我们的核心要素。 一、核心概念&#xff1a…

1.2章节input输入函数语法使用和示例

在Python中&#xff0c;input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本&#xff0c;然后按回车键&#xff0c;最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时&#xff0c;它会打印出 "请输入一些文字: "&#xff0c;然后等…

工商银行:低息差下的挣扎

时隔四年&#xff0c;市值再度超越贵州茅台成为A股“股王”。 今天要说的就是“宇宙行”——中国工商银行 虽然茅台的信仰开始崩塌&#xff0c;但各大银行股巨头们今年也不好过。2024年一季度六大行业绩集体受挫&#xff0c;息差普遍收窄超过20个基点。其中&#xff0c;包括工…

航天航空零部件装配制造MES系统解决方案详解

航天航空零部件制造行业是一个技术密集、工艺复杂且对精度和可靠性要求极高的行业。为了提升生产效率、保证产品质量并满足严格的行业标准&#xff0c;越来越多的航天航空零部件制造企业引入了MES系统。本文将详细介绍MES系统在航天航空零部件制造行业的应用方法及其价值。 一…

卸载vmware时2503,2502报错的解决办法

1.背景 windows 卸载vmware时&#xff0c;显示2503报错&#xff0c;无法完全卸载 2. 解决方案 2.1 参考安装报错2502&#xff0c;2503的处理方式 文献&#xff1a;https://blog.csdn.net/zhangvalue/article/details/80309828 2.1 步骤&#xff1a; 2.1.1 cmd 管理员打开…

《2023-2024安服安全技术研究白皮书(正式版)》

2023年5月&#xff0c;我们再次更新了《2022-2023安服安全技术研究白皮书》&#xff0c;这次我们进行了内容丰富&#xff0c;并特别介绍了我们围绕反APT技术栈的一些研究和想法&#xff0c;通过该技术栈的积累扩展了更多的安全能力&#xff0c;包括对攻击生命周期本身的认知、攻…

Arduino - 继电器

Arduino - 继电器 In a previous tutorial, we have learned how to turn on/off an LED. In this tutorial, we are going to learn how to turn on/off some kind of devices that use the high voltage power supply(such as a light bulb, fan, electromagnetic lock, lin…

亚马逊卖家的ERP代理贴牌与独立部署策略

贴牌&#xff0c;就是将亚马逊ERP进行个性化定制&#xff0c;包括更换成自己公司的logo、域名、收款账户&#xff0c;同时支持与自己的物流渠道进行对接&#xff0c;以满足自建仓库的需求。 对于独立部署&#xff0c;这需要有自己的服务器、数据库和存储空间等基础设施。在贴牌…

AI时代的风口,中小企业也不能错过

文&#xff5c;白 鸽 编&#xff5c;周效敬 这些场景&#xff0c;对你来说或许并不陌生&#xff1a; 在医院的大屏上&#xff0c;一个医生模样的数字人在做医疗知识科普&#xff1b;在抖音的直播间里&#xff0c;一个真人模样的数字人在线上直播带货&#xff0c;24小时无休无…

音频剪辑技巧:音频降噪在线怎么降噪?分享7种录音去除杂音方法

相信很多小伙伴们都有这种苦恼&#xff1a;在编辑音频时&#xff0c;你可能发现即使你使用了价格昂贵的隔音麦克风&#xff0c;在录音中仍然存在呼吸声和咳嗽声。因此&#xff0c;如果要传达清晰干净的声音以表达你的信息&#xff0c;你该如何从录音去除杂音呢&#xff1f;别心…

小程序消息定时任务(定时触发器)发送总结

文章目录 小程序消息定时任务(定时触发器)发送总结1.开发思路2.实现办法3.查看定时触发器是否正常运作4.总结小程序消息定时任务(定时触发器)发送总结 1.开发思路 在使用小程序的时候总是会遇到消息任务发送的情况,但是很多时候是预约发送,这个时候我们就要使用小程序里…