【算法题】滑动窗口最大值

信创改造实战:SpringBoot项目迁移到宝兰德BES 9.5.5的完整避坑指南(附依赖配置) 本文详细介绍了将SpringBoot项目迁移到宝兰德BES 9.5.5中间件的完整流程,包括环境准备、依赖调整、Web.xml版本适配、部署配置优化及常见问题解决方案。特别针对信创改造需求,提供了排除Tomcat依赖、处理BES专用starter等实用技巧,帮助开发者顺利完成国产中间件迁移。 阅读详情

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
进阶:
你能在线性时间复杂度内解决此题吗?
示例:
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
[1 3 -1] -3 5 3 6 7     3
1 [3 -1 -3] 5 3 6 7     3
1 3 [-1 -3 5] 3 6 7     5
1 3 -1 [-3 5 3] 6 7     5
1 3 -1 -3 [5 3 6] 7     6
1 3 -1 -3 5 [3 6 7]     7

原题链接:https://leetcode-cn.com/problems/sliding-window-maximum/

思路

本题的解法非常有代表性,试想如果我们通过暴力法解决此题,每次都需要对窗口中的元素进行扫描;如果在此基础上进行改进,可以比较容易想到记录下maxIndex,当maxIndex滑出窗口时,再进行遍历。
那么有什么好的数据结构能够马上知道下一个最大的元素呢?
答案是:单调双端队列

解法


每次滑动窗口的移动,都将新加入的值插入到队尾,但要注意维护的是单调递减队列,需要将队尾小于该值的全部移除。然后检查队首(最大值)是否移出了滑动窗口,如果移出了则移除队首即可。

代码
import java.util.Deque;
import java.util.LinkedList;

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums.length==0) return new int[0];
        Deque<Integer> deque = new LinkedList<>();
        int[] result=new int[nums.length-k+1];
        int index=0;
        for(int i=0;i<nums.length;i++){
        	//将队尾小于当前值的元素全部移除
            while(!deque.isEmpty() && nums[deque.peekLast()]<nums[i])
                deque.pollLast();
            deque.addLast(i);  // 当前元素入队
            if(deque.peekFirst() == (i-k))  // 如果队首移出了滑动窗口
                deque.pollFirst();
            if(i>=k-1) result[index++]=nums[deque.peekFirst()]; // 窗口已经形成,记录结果
        }
        return result;
    }
}
比亚迪 10C 闪充技术全解析:超高速离子通道与双电子流设计如何颠覆电动车补能格局? 性能碾压主流方案参数宁德时代6C比亚迪10C优势幅度最大电流700A1000A+43%内阻降幅30%50%+67%5分钟补能240公里400公里+67% 阅读详情

相关推荐

宏基因组分析|从Binning到MAG优化的全流程实战指南

本文提供了一份宏基因组分析从Binning到MAG优化的全流程实战指南。详细解析了宏基因组分箱(Binning)的核心原理与必要性,并手把手指导如何利用Bowtie2、MetaBAT2和CheckM等工具构建分箱流水线,进行质量评估与筛选,最终获得高质量宏基因组组装基因组(MAG)。文章还分享了常见问题排查与进阶优化策略,为后续物种分类、功能注释等深度分析奠定坚实基础。

weixin_29260291的博客 454

滑动窗口最大值

滑动窗口最大值 题目链接 方法1:暴力求解: 对于每个滑动窗口,我们可以使用 O(k) 的时间遍历其中的每一个元素,找出其中的最大值。 对于长度为 n 的数组 nums ,窗口的数量为 n-k+1 因此该算法的时间复杂度为 O((n-k+1)k)=O(nk),会超出时间限制,需要进行一些优化。 暴力优化: 滑动窗口特点就是每次移动,会出一个元素,进一个元素。 也就是说它们共用着 k-1个元素,而只有 1 个元素是变化的。我们可以根据这个特点进行优化。 首先最容易想到的就是去维护一个最大值,窗口每滑动一次,

Better_WZQ的博客 7450

inferCNVpy实战指南:从安装到肿瘤细胞识别

本文提供inferCNVpy实战指南,详细介绍了从环境安装、数据准备到核心CNV推断分析的完整流程。重点讲解了如何利用该工具从单细胞转录组数据中识别肿瘤细胞,包括参考细胞选择、参数调优、结果可视化与解读,并分享了关键的避坑技巧,帮助用户高效完成肿瘤细胞识别。

weixin_29079643的博客 428

滑动窗口的最大值问题

滑动窗口最大值问题

长林攻城狮的博客 2073

量化实战:用三种波动率模型给你的期货策略做个“体检”(附Python代码与螺纹钢案例)

本文深入探讨了三种专业波动率模型(Parkinson、Garman-Klass和Rogers-Satchell)在期货量化策略中的应用,并以螺纹钢期货为例,展示了如何通过Python实现这些模型进行多维度波动率分析。文章详细比较了不同模型的特点和适用场景,提供了动态仓位管理、止损策略优化等实战应用方案,帮助交易者更精准地评估市场风险,优化策略表现。

weixin_26824299的博客 460

轻量级NAS的隐秘战场:比特米盒CumeBox2与CasaOS的生态融合实践

本文探讨了比特米盒CumeBox2轻量级NAS设备与CasaOS操作系统的生态融合实践。通过硬件选型、系统部署、性能优化和应用场景分析,展示了如何将CumeBox2与CasaOS深度整合,打造经济实用的家庭数据管理中心,特别适合入门级用户和小型办公环境。

rl6adventurer的博客 893

leetcode239.滑动窗口最大值

题目: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3

qq_36849855的博客 150

VS Code/TRAE集成Cppcheck并启用MISRA规则

本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。

SDFangFang2025的博客 1282

算法题 滑动窗口最大值

本文介绍了解决滑动窗口最大值问题的单调队列算法。给定数组和窗口大小k,算法通过维护一个双端队列(存储索引)来保证队列元素单调递减,从而高效获取每个窗口的最大值。关键操作包括:移除超出窗口的队首元素、移除队尾小于当前值的元素,并在窗口形成后记录队首元素(当前最大值)。算法时间复杂度为O(n),空间复杂度O(k)。文中给出了Java实现代码、算法分析、示例过程演示(如输入[1,3,-1,-3,5,3,6,7],k=3时输出[3,3,5,5,6,7])和测试用例,强调了队列存储索引的优势和边界处理要点。该方法优于

红血哥 449

YOLOv12改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构

本文记录的是基于。采用了创新性的方法,通过精心平衡网络和来提升性能。本文将的设计优势融入YOLOv12中,提升YOLOv12的性能与效率,使其在目标检测任务中表现更为出色。本文配置了原模型中的共种不同大小的模型结构,以满足不同的需求。

Limiiiing的博客 963

YOLOv11低光照检测性能优化:基于Retinexformer主干网络的深度改进实践

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!@[TOC]在自动驾驶、安防监控、遥感探测等关键领域,目标检测系统必须保证24小时全天候的可靠工作。然而,现有最先进的目标检测模型,包括YOLOv11,其训练数据大多源于光照良好的场景。当环境光照条件急剧下降时,图像会出现严重的噪声、低对比度、颜色失真和细节丢失,直接导致模型性能断崖式下跌。常规的解决方案如图像直方图均衡化或简单的伽马校正,往往收效甚微,甚至可能放大噪声,进一步干扰检测。

m0_71589036的博客 189

Python算法题集_滑动窗口最大值

题目239:滑动窗口最大值:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 *滑动窗口中的最大值* 。

长孤秋落的札记 1267

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1622

【刷力扣算法题】滑动窗口最大值

【代码】【刷力扣算法题】滑动窗口最大值。

杨老师的小跟班(*∩_∩*) 161

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[算法题]滑动窗口最大值

题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。 题解 方法一 暴力做法,遍历每一个窗口 时间复杂度 O(kn) 省略 方法二 使用双端队列的方法 当我们遍历数组时,比如 [2, 3, 4, 2, 6, 2, 5, 1] 中,遍历到 6 的时候 此时滑动窗口的范围是 [4, 2, 6] 但是 6 前面的 4 和 2 都比

qq_20016169的博客 178

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法题|滑动窗口的最大值

校核方式为:查看元素中堆顶元素是否属于滑动窗口的范围内,查看的方法为比较堆顶元素下标是否大于滑动窗口左指针下标(i-k)。如果堆顶元素不在滑动窗口范围内,则弹出该元素,重复校核新堆顶元素,直至堆顶元素满足校核要求。每加入一个元素,视为滑动窗口向右移动一格(此时滑动窗口右指针为i),每次加入元素对该优先队列进行校核。官解第一种方法使用的优先队列,这个方法我觉得很妙,于是补充一下细节,加深对题目的理解。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3。

weixin_48118167的博客 350

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Leetcode算法题【困难】239.滑动窗口最大值

具体步骤请查看每个关键函数的代码注释。具体步骤请查看每个关键步骤的代码注释。

qq_40800519的博客 264

算法题:滑动窗口最大值

leetcode 地址:滑动窗口最大值 思路 维护一个长度最大为 k 的数组 queen(里面存 index),让输入数组 nums 中的元素依次进入该数组。每有新元素进入的时候,对数组进行维护:删除比该元素小的数值的索引,将当前元素的索引存入数组末尾。这样可以做到数组第一个元素永远是最大的。 例如:nums = [1,5,4,9,7,8,6],k=3,数值进出 queen 的过程如下: i =...

猿海无涯,码农无边 328

算法题:滑动窗口的最大值

题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2

fgs的博客 293

滑动窗口算法_剑指offer算法题064: 滑动窗口的最大值

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第064是道剑指offer算法题:题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5...

weixin_39855843的博客 107

算法题-滑动窗口最大值【JS实现】

滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗? 提示: 1 <= nums.length <= 10^5 -10^4 <= nums[i] <= 10^4 1 <= k <= nums.length 链接:https://leetcode-cn.com/problems/sli

CrystalLee 631

【算法题讲解】239. 滑动窗口最大值

没问题,小伙伴!咱们再换个更接地气的方式,把这个算法讲得像讲故事一样轻松有趣,保证你听完会觉得“哦!原来是这么回事!”😄 别急,咱们慢慢来,像剥洋葱一样一层一层揭开它!想象你在学校门口卖烧烤,窗口是个烤架,只能放 串肉。你想让顾客每次都能快速知道“当前烤架上最粗的那串肉”是哪串。顾客会从左到右一串串看过去,每次挪走最左边的串(过期),加一串新串(新来的)。你得飞快报出当前烤架上最大的一串!你的原方法是:每次挪动后,把烤架上的 3 串肉都拿下来看一遍,挑出最粗的,太费时间了!现在咱们用一个“聪明小本子”(

iamzchi 975

算法题-滑动窗口的最大值

题目(来源力扣): 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3

乐无声的博客 330

算法题-滑动窗口最大值数组

2017-10-29 23:40:30 题目描述: 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。窗口中每次会产生一个最大值,求这n-w+1最大值组成的数组。 要求时间复杂度为O(n)。 求解: 举例:[4,3,5,4,3,3,6,7],窗口大小为3 结果:[5,5,5,4,6,7] 采用一个双端队列来维护窗口中的最大值,以及可...

aitie1479的博客 248

认真对待每一道算法题 之 滑动窗口的最大值

给你一个滑动窗口和一个数组,滑动窗口从数组第一个元素开始向后滑动,每滑动一下就计算当前窗口中对应的数组元素的最大值; 设置窗口长度为m,数组长度为n,有O(n*m)算法,用最大堆的O(n*lgm)算,利用已经比较过的元素之间关系的O(n)算法; 摘自博客http://blog.youkuaiyun.com/sgbfblog/article/details/7967489 题目描述...

dingmu2707的博客 273

算法题(day11)- 逆波兰表达式求值 & 滑动窗口最大值

使用map存储每个数出现的次数,赋值给vector<pair<int,int>>,用sort进行排序,sort默认对 pair.first 进行排序,所以pair.fisrt需要存频率, pair.second存数字。使用单调队列存储窗口中的最大值,单调队列由大到小排列,等值元素一起存储在队列中(等值但过期时间不同)。过期判断,当n[i - k] = q.front() 时,队头元素过期。优先队列(小顶堆)这个的使用有点没看懂。数据压栈,遇到符号进行计算。

qq_57433732的博客 268
上一篇: 【算法】全排列算法
下一篇: 布隆过滤器
Steven_L_
博客等级 码龄7年 5粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值