刷题篇一:单调栈和窗口及其更新结构

滑动窗口与单调栈结构 滑动窗口最大/小值更新结构 现在有一个数组arr,有两个指针L、R。初始时L、R都指向-1,L、R都只能向右滑动,且L不能超过R。请快速求出L到R中间的最大值。 创建一个双向队列,队列始终保持从大到小排列。当R向右滑动时,如果新加入窗口的数字大于双向队列头节点的数字,则从队列中弹出节点直到队列中即便添加新数字后也可以保持从大到小排列。队列中头节点的最大值就是窗口内的最大值。 假设存在数组ar... 阅读详情

 

滑动窗口是什么?

滑动窗口是一种想象出来的数据结构:

滑动窗口有左边界L和右边界R

在数组或者字符串或者一个序列上,记为S,窗口就是S[L..R]这一部分

L往右滑意味着一个样本从左侧出了窗口,R往右滑意味一个样本进了窗口

L和R都只能往右滑并且L<=R

题目一:

假设一个固定大小为W的窗口,依次划过arr,返回每一次滑动窗口的最大值

例如,arr=[4,3,5,4,3,3,6,7], W=3

返回:[5,5,5,4,6,7]

剑指Offer59

思路:维护一个双端队列,队列的数据保证严格的从大到小排列(不能包含等于),每次取最大值,只需要取第一个即可。

如果队列的数据,和当前索引超过窗口,必须淘汰队列中的最大值。

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if (nums == null || nums.length < k || k < 1) {
            return new int[0];
        }

        int len = nums.length;

        LinkedList<Integer> linkedList = new LinkedList();
        int[] res = new int[len - k + 1];
        int index = 0;
        for (int i = 0; i < len; i++) {
            while (!linkedList.isEmpty() && nums[linkedList.peekLast()] <= nums[i]) {
                linkedList.pollLast();
            }
            linkedList.addLast(i);

            if (linkedList.peekFirst() == i - k) {
                linkedList.pollFirst();
            }
            if (i >= k - 1) {
                res[index++] = nums[linkedList.peekFirst()];

            }
        }
        return res;

    }
}

 

【单调队列&单调栈专题】&【蓝桥杯备考训练】:矩形牛棚、单调栈、滑动窗口、子矩阵、最大子序和、烽火传递【已更新完成】 单调栈、单调队列的模拟、蓝桥杯原题、usaco training、算法竞赛进阶指南、矩形牛棚、单调栈、滑动窗口、子矩阵、最大子序和、烽火传递 阅读详情

相关推荐

代码随想录刷题|一刷总结

成果汇报经验总结为什么要刷题未来计划以及附件资源,里面有所有pdf,需要自取。我会在末尾放上pdf,点击思维导图的右上角的【箭头】可以直接跳转到leetcode,提供一键跳转方便复习。

东东唯一指定铲屎官 7221

算法与数据结构技术书籍从入门到进阶推荐适合大神小白附技术书阅读方法论【附网盘链接】

转载自某大佬博客 https://pymlovelyq.github.io/2018/10/06/Algorithm/ 前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用。 对于每一章的知识,先阅读标题,弄懂大概讲的是什么主题,再去快速看一遍,不懂也没有关系,但是一定要在不懂的地方...

qq_43337774的博客 8207

【白话系列】倍增算法

【序言】         我认为吧,所有能够优化复杂度的算法都是神奇的,所有能够化繁琐为形象的文字都是伟大的。一直觉得倍增算法是个很神奇的东西,所以决定写点东西纪念一下它。但是作为一个非常不称职的OIER,我非常讨厌在看别人的算法解析时整版的i,j,k等我看到鼠标就惯性移到右上角的符号语言,所以我想用最形象的方式来纪念它。 【一】         从前,有一只可爱得不得了的小白兔,它想从

JarjingX 3万+

单调栈结构及其应用

单调栈 解决一个数组中,对于每个数,求左边离它最近的比它大(小)的数,右边离它最近的比它大(小)的数,时间复杂度O(N)实现。 准备一个栈,栈底到栈顶是从大到小的(保存的是数据的下标)。 每来一个数 num,若 栈空 或 num < 栈顶top,num入栈,继续判断下一个数。 若num = top,将 num 与 top 压在同一层。 若num > top,则 top 出栈,同时 t...

Pancake_Blog 250

学习海康VisionMaster之表面缺陷滤波

本文介绍了VisionMaster中表面缺陷滤波技术的应用。该技术通过数学变换抑制背景干扰、增强缺陷特征,适用于电池铝壳、垫圈/螺丝等无纹理背景的表面缺陷检测(划痕、凹坑、异物等)。操作流程包括:图像导入、轮廓定位、位置修正、参数设置(重点讲解滤波核尺寸/数量/标准差等关键参数的调整策略)。文章通过案例演示了如何通过多方向滤波响应识别表面划伤,并指出需结合blob分析进一步优化检测结果。该技术对工业质检具有实用价值,参数设置需结合缺陷特征与背景特性灵活调整。

yuhouxiyang的专栏 2828

【计算机视觉学习03】全景图像拼接

文章目录一、基本原理1.1 图像拼接的几何原理1.2 直线,圆,复杂曲线方程拟合1.3 RANSAC算法1.4 APAP算法1.5 寻找最佳拼接缝(Seam Finding)1.5.1 最大流问题1.5.2 最大流问题的增广链算法1.5.3 最大流最小割定理二、 图像拼接具体实现2.1 代码2.2 运行结果 一、基本原理 将两幅或多幅具有重叠区域的图像,通过特征匹配将具有相同的特征点(SIFT特征点)的图像拼接在一起,将来自多个不同视角拍摄的图像变换到同一视角下,拼接成一张宽视野图像。 图像拼接基础流程

一个正在努力学习的iter 7788

1、数据结构进阶一动态存储管理概念

1、数据结构进阶一动态存储管理概念            在之前的笔记中,我们学习了数据结构的一些重要概念以及简单实现。很多代码都是摘自网络的,不过都亲测可用的并附以解释了。            这篇开始还是学习数据结构,不过类似数据结构笔记的下篇。            “一个精神生活很充实的人,一定是颐和园很有理想的人,一定是一个很高尚的人,一定是一个只做物质的主人而不做物质的

badman250的专栏 5279

Verilog-asm小练习—PLL建模

Verilog- ams是Verilog标准的模拟混合信号语言,以下是对PLL建模的一种思路参考

weixin_44700185的博客 1016

算法基础13-《进阶》单调栈和窗口及其更新结构

文章目录1 单调栈和窗口及其更新结构1.1 窗口1.1.1 滑动窗口是什么?1.1.2 滑动窗口能做什么?1.1.3 维护窗口滑动的更新结构1.1.4 高频题:求滑动窗口最大值1.1.5 高频题二:达标子数组数量问题---560(不算)1.1.6 如何优化一个问题?1.2 单调栈1.2.1 单调栈结构1.2.2 单调栈的应用 1 单调栈和窗口及其更新结构 1.1 窗口 1.1.1 滑动窗口是什么? 窗口只是我们脑海中的一个范围,用过L和R来规定我们窗口的边界。保证L<=R这个条件 1、滑动窗口是一

weixin_42503072的博客 453

Ubuntu22.04安装ROS1

代表使用 2 线程进行编译,可以根据 CPU 适当调整。如果出现小乌龟窗口,说明安装成功 🎉!启动成功,则打开另一个终端,测试。需要解决一些兼容性问题,因为。由于 Ubuntu 22.04。过程,确保成功安装。

asafriend的博客 4646

Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理

高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。高可用性和集群管理是 Sharding-JDBC 和 Sharding-Proxy 在生产环境中成功应用的关键。本篇详细介绍了数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及分布式治理功能。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1393

数据结构进阶(一)

快速排序

Neo的战斗部 229

RK3588嵌入式AI部署实战:从环境搭建到模型推理全链路

嵌入式AI部署涉及交叉编译、NPU驱动、模型量化与运行时环境等多个技术环节,其核心挑战在于软硬件版本矩阵的严格匹配。在边缘计算场景中,RK3588凭借6TOPS NPU算力成为热门平台,但环境搭建与模型转换的复杂性常导致部署效率低下。通过容器化工具链管理、量化参数对齐及多线程推理优化,可显著提升部署稳定性与推理性能。典型应用包括智能安防、工业质检与视频结构化分析。本文围绕RK3588的AI部署与环境搭建,系统梳理从系统烧录到板端推理的完整实践路径。

weixin_42520573的博客 282

2023华为机考刷题指南:八周机考速通车

华为机试题库总结

m0_46663240的博客 2万+

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 328

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Leetcode刷题笔记—单调栈篇

本题帮助大家总结了关于大厂面试中跟单调栈相关的高频考题,希望对你有用,一起加油呀~

qq_42898642的博客 485

IEM模型,地表粗糙度模拟

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

数据结构:单调栈和单调队列

单调队列和单调栈,有LeetCode典型例题哦~

m0_63997099的博客 2774

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【算法】算法进阶训练(窗口内最大值的更新结构和单调栈结构)

窗口内最大值的更新结构和单调栈结构 一、窗口内最大值的更新结构及其扩展面试题目 介绍窗口以及窗口内最大值或最小值的更新结构(单调双向队列) import java.util.LinkedList; public class UpdateMax { public static class UpdateDeque { public LinkedList&lt;Int...

小哲的博客 1303

算法模板之单调栈和单调队列图文详解

本文主要结合图文对单调栈和单调队列模板进行了讲解,更多精彩内容等你来浏览。

聆风吟的博客 3433

7 月高频算法题回顾:滑动窗口、双指针与单调栈的精进

7 月对这三个技巧的精进,核心收获不在代码,而在两个认知上的升级:第一,"边界条件"不是需要死记的例外情况,而是算法本质的一部分。滑动窗口的收缩条件设计,本质上是"窗口有效性"这个数学定义在代码中的等价表达。第二,模板的价值在于提炼共性,而不是替代思考。当你画出了状态转移图,写出了不变式,代码其实已经是水到渠成的事了。8 月,继续用这个思路去攻区间 DP 和状态压缩 DP。不再追求做题量,追求的是每个技巧都能从原理讲到实现,从实现讲到变形。

cannonjinx的博客 5315

算法刷题记录——标签分类汇总(持续更新)

个人算法刷题持续记录文档的目录页。

weixin_42826353的博客 1391

单调栈(C/C++)

单调栈在题目中应用很广泛,是一名算法选手所必须掌握的基础算法,在题目中遇到寻找最大最小的元素,或者对元素进行找最大最小的问题可以考虑单调栈,单调栈主要适用于一些需要找到“下一个更大(或更小)元素”的问题。通过维护一个单调递增(或递减)的栈,可以高效地找到下一个更大(或更小)元素。在实际应用中,需要注意栈的边界条件及特殊情况的处理。单调栈的时间复杂度通常为O(n),其中n为元素的个数。利用单调栈可以在题目规定的时间可以解决问题。

闻道有先后,术业有专攻 2070

01-单调栈和窗口及其更新结构

数据结构 单调栈 窗口

yritssh的博客 201

单调栈和单调队列及其相关应用

本文主要介绍了单调栈和单调队列的原理及其简单例题应用

Lee贤的博客 736

算法训练营【1】 单调栈和窗口

文章目录单调栈和窗口滑动窗口滑动内最大值和最小值的更新结构[剑指 Offer 59 - I. 滑动窗口的最大值](https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/)求达标子数组的数量单调栈没有重复值:有重复值:题目三 子树组特定信息的问题预处理技巧:[84. 柱状图中最大的矩形](https://leetcode-cn.com/problems/largest-rectangle-in-histogram/)法

尔等同学的博客 947

CCF-CSP认证 刷题路线分享

刷题路线

2302_79939572的博客 2902
上一篇: mongodb安装
下一篇: 算法与数据结构之排序算法
给自己加加油
博客等级 码龄8年 302粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值