单调队列与二维单调队列

news/2025/4/3 2:57:39/文章来源:https://www.cnblogs.com/Arc-ux/p/18804910

洛谷单调队列模板

n,k=map(int,input().split())
l=list(map(int,input().split()))
def sld(m,k):max_r=[]max_q=[]min_r=[]min_q=[]for i,num in enumerate(m):while max_q and m[max_q[-1]]<num:max_q.pop()max_q.append(i)while min_q and m[min_q[-1]]>num:min_q.pop()min_q.append(i)while max_q[0] <= i-k:max_q.pop(0)while min_q[0] <=i-k:min_q.pop(0)if i >=k-1:max_r.append(m[max_q[0]])min_r.append(m[min_q[0]])return max_r,min_r
mx,mi=sld(l,k)
for i in mi:print(i,end=" ")
print()
for j in mx:print(j,end=" ")

蓝桥杯二维单调队列

def sliding_window(nums,k): #nums为一维数组,k为窗口大小max_result=[] #用来记录每次的最大值min_result=[] #用来记录每次的最小值q_max=[]      #记录一维数组中最大值的索引值q_min=[]      #记录一维数组中最小值的索引值for i,num in enumerate(nums): #i表示索引值,num表示索引值对应的值#维护最大值的单调递减队列#最大值队列存在,且队列中右边元素小于当前值则删除队列右边元素while q_max and nums[q_max[-1]]<num:q_max.pop()#将当前值添加到队列的右边q_max.append(i)#维护最小值的单调递增队列#最小值队列存在,若队列最右边元素大于当前值则删除队列右边元素while q_min and nums[q_min[-1]]>num:q_min.pop()#将当前值添加到队列的右边q_min.append(i)#移除窗口之外的索引值#i-k表示当前索引值的前k个元素,表示窗口的最左端#如果最大值/最小值的最左端位置与第一个索引值相同,则删除if q_max[0]==i-k:q_max.pop(0)if q_min[0]==i-k:q_min.pop(0)#当窗口大小达到k时,则记录此时的最大值和最小值if i>=k-1:max_result.append(nums[q_max[0]])min_result.append(nums[q_min[0]])#返回最后的结果    return max_result,min_resultdef sliding_windows(matrix, a, b): #matrix为二维数组,a×b为窗口大小row_max = [] #用来记录每行最大值的二维矩阵row_min = [] #用来记录每行最小值的二维矩阵#对每行横移窗口,进行列压缩,将b列变为一列,只记录最值for row in matrix:max_list, min_list = sliding_window(row, b)row_max.append(max_list) #将每行最大值列表入row_maxrow_min.append(min_list) #将每行最小值列表入row_min#对每列横移窗口,进行列压缩,将a列变为一列,只记录最值sub_max = []sub_min = []for col in zip(*row_max): #通过zip函数得到其列列表max_list, _ = sliding_window(col, a)sub_max.append(max_list)for col in zip(*row_min):_, min_list = sliding_window(col, a)sub_min.append(min_list)#sub_max与sub_min即所有子矩阵的最大值和最小值矩阵return sub_max,sub_min

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

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

相关文章

URAT协议自学笔记

定义 URAT(Universal Asynchronous Receiver/Transmitter)协议是一种通用异步收发传输协议,用于在两个设备之间进行串行数据通信。它将并行数据转换为串行数据进行传输,接收时再将串行数据转换为并行数据。 特点 异步通信:不需要共享时钟信号,通过波特率同步数据传输。 全…

解决手机每次复制都弹出google的nearby服务-分享到附近的设备

起因: 我的手机刷了国际版的系统,有google套件,每次复制都会唤起nearby附近分享这个组件,感觉很烦。 解决方法: 下载AppOps,这个软件能方便我们管理和监视应用权限。 使用Shizuku授权点击左上角,选择使用情况历史点击剪切板我们切出去, 在别的应用中进行一次复制,就可…

neo4j community教程

neo4j community最新版本安装教程(2025.1) 前言 ​ neo4j desktop以交互性好,体验好为优点。但是自24年中旬neo4j官网先后被墙和neo4j desktop联网打不开等诸多问题,本文作者建议使用community版本。 正文下载安装包neo4j官网,下载community最新版本(5.26.1)jdk-23下载(这…

代码随想录第四天 | Leecode 24. 两两交换链表、19.删除链表的倒数第N个节点、 面试题 02.07. 链表相交 、142.环形链表II

Leecode 24. 两两交换链表 题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 题目描述:思路:虚拟头节点,注意保存临时节点 题目解答: 循环结束的时候就是,当链表偶数个时cur->next->next=NULL,奇数个时cur->next=NULL。 Leecode 19. 删…

JpaSpecificationExecutor :Spring Data JPA 动态查询的核心扩展

JpaSpecificationExecutor 是 Spring Data JPA 动态查询的核心扩展,通过 Specification 机制提供灵活的类型安全查询,解决了传统 JPQL 或 Criteria API 的冗余问题,特别适合复杂业务场景下的动态数据访问需求。 核心设计目标: ​动态查询:允许运行时动态构建查询条件,避免…

四款高效报表软件推荐 助力企业数据可视化

概述 在数字化时代,企业和组织越来越依赖数据驱动决策,报表软件成为提高数据可视化能力、优化业务管理的关键工具。本文将为大家介绍四款功能强大的报表软件,帮助不同需求的企业找到合适的解决方案。 一、山海鲸报表 山海鲸报表是一款零代码的免费数据可视化和报表生成工具,…

AMDGPU对CUDA支持方式的分析

AMDGPU对CUDA支持方式的分析 实现方式是针对HIP API(Heterogeneous-Computing Interface for Portability)做CUDA的接口套壳,即将cuda的API接口作为标准接口,用AMD ROCm实现cuda的API(目的就是保证对外的API与CUDA完全相同),但实际调用 HIP+ROCm 的相关接口实现(即实际…

AMD GPU平台简单分析

AMD GPU平台简单分析 在启动docker的测试命令中,传入一个设备参数--device=/dev/kfd,转到DOCKER环境,kfd表示AMDGPU异构计算的GPU设备驱动(KMD)的设备节点,它是用户操作GPU的基础。AMD GPU设备驱动流程简单分析,如图1-19所示。图1-19 AMD GPU设备驱动流程简单分析 AMDKF…

Javascript - 3

Javascript - 3 背后的运行原理High levelGarbage-collectedjs引擎内部的算法,为了不被不必要的东西堵塞,会从计算机内存中 自动删除旧的、未使用的对象解释型的 / 即时编译的语言(为了更快做出的调整) interpreted or just-in-time compiled通过 解释器(Interpreter) 逐行…

GPU学习笔记

从引言中“Dennard Scaling”的失效开始,引入GPU出现的背景,又介绍了GPU的通用性,以及高并发、低延迟保证的高计算速度。随后,我们以最常见的CUDA为例,介绍了GPU编程的基础,SIMT与SIMD,编译链接的过程。最后,我们深入硬件层面,分为三步走,先用最简系统“run起来”,然…

信创邮箱了解一下

企业微信后台,邮箱模块突然多了 【信创邮箱】这模块,让我们了解一下信创邮箱。一、信创邮箱的定义 信创邮箱,全称“信息技术应用创新邮箱”,是指基于信创全生态打造的企业邮箱服务。它遵循“信息技术安全创新”(简称“信创”)原则,采用国内自主研发的技术和方案实现信息…

小了 60,500 倍,但更强;AI 的“深度诅咒”

作者:Ignacio de Gregorio图片来自 Unsplash 的 Bahnijit Barman几周前,我们看到 Anthropic 尝试训练 Claude 去通关宝可梦。模型是有点进展,但离真正通关还差得远。 但现在,一个独立的小团队用一个只有一千万参数的模型通关了宝可梦,比主流前沿 AI 模型小了几千倍。 举个…