题目描述

A公司准备对他下面的N个产品评选最差奖,
评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。
评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。

输入描述
第一行,数字M,表示评分区间的长度,取值范围是0<M<10000
第二行,产品的评分序列,比如[12,3,8,6,5],产品数量N范围是-10000 < N <10000

输出描述
评分区间内最差产品的评分序列

用例

输入3
12,3,8,6,5
输出3,3,5
说明

12,3,8 最差的是3

3,8,6 最差的是3

8,6,5 最差的是5

滑动窗口最小值问题详解

一、核心解题思路

问题分析
题目要求计算产品评分序列中每个长度为M的连续子序列(滑动窗口)的最小值。具体来说:

  • 给定一个长度为N的产品评分序列
  • 对于每个位置i(起始位置),计算从i开始连续M个产品中的最低评分
  • 最终输出所有窗口最小值组成的序列

关键特性

  1. 滑动窗口:窗口大小固定为M,每次向右移动一个位置
  2. 实时计算:需要高效获取每个新窗口的最小值
  3. 边界处理:当窗口超出序列边界时停止计算

暴力解法的问题
直接遍历每个窗口找最小值的时间复杂度是O(N×M),当N和M较大时(最大10000),计算量可达1亿次,效率低下。

优化方案:单调队列
使用双端队列维护一个单调递增序列:

  1. 队列中存储元素索引,对应值保持递增关系
  2. 队首元素始终是当前窗口的最小值
  3. 添加新元素时,从队尾移除比它大的元素
  4. 移动窗口时,检查队首元素是否过期

算法流程

初始化空队列
遍历序列中的每个评分:1. 移除过期元素(不在当前窗口的)2. 移除队尾比当前元素大的元素3. 将当前元素加入队尾4. 记录当前窗口最小值(队首元素)
二、完整代码实现
from collections import dequedef main():# 读取输入M = int(input().strip())scores = list(map(int, input().split(',')))# 边界检查if M <= 0 or M > len(scores):print("")returnresult = []  # 存储结果dq = deque()  # 双端队列(存储索引)for i in range(len(scores)):# 1. 移除过期元素(不在当前窗口内)if dq and dq[0] <= i - M:dq.popleft()# 2. 移除队尾比当前元素大的元素while dq and scores[dq[-1]] >= scores[i]:dq.pop()# 3. 添加当前元素索引dq.append(i)# 4. 记录窗口最小值(当窗口完全形成时)if i >= M - 1:result.append(str(scores[dq[0]]))# 输出结果print(",".join(result))if __name__ == "__main__":main()

代码解析

  1. 输入处理

    • 读取窗口大小M
    • 读取评分序列并转为整数列表
    • 边界检查:M必须合法(0<M≤序列长度)
  2. 数据结构

    • 结果列表result存储最小值序列
    • 双端队列dq存储元素索引
  3. 核心算法

    • 移除过期元素:检查队首索引是否在窗口外(索引 ≤ i-M)
    • 维护单调性:从队尾移除比当前元素大的值
    • 添加新元素:将当前索引加入队尾
    • 记录结果:当窗口完全形成(i ≥ M-1)时记录队首值
  4. 输出处理

    • 将结果列表转为逗号分隔字符串
三、示例解析

输入:M=3, 序列=[12,3,8,6,5]

执行过程

当前索引当前值操作步骤队列状态窗口范围最小值
i=012添加索引0-
i=13移除比3大的12 → 添加索引1[0-1]-
i=28添加索引2[1,2][0-2]3
i=36移除比6大的8 → 添加索引3[1,3][1-3]3
i=45移除过期索引1 → 移除比5大的6 → 添加索引4[2-4]5

队列状态变化

i=0: 队列=[0] → 对应值[12]
i=1: 队列=[1] → 对应值[3](移除12)
i=2: 队列=[1,2] → 对应值[3,8]
i=3: 队列=[1,3] → 对应值[3,6](移除8)
i=4: 队列=[4] → 对应值[5](移除3和6)

输出:3,3,5

窗口最小值计算

  1. 窗口[12,3,8] → 最小值3
  2. 窗口[3,8,6] → 最小值3
  3. 窗口[8,6,5] → 最小值5
四、总结

关键要点

  • 单调队列维护:确保队列中元素对应值单调递增
  • 索引存储:通过索引同时获取元素值和位置信息
  • 过期检查:每次迭代检查队首是否在窗口内
  • 及时清理:添加新元素时移除无效的较大元素

适用场景

  • 需要高效计算滑动窗口最小值的场景
  • 实时数据流中的统计分析
  • 序列处理中的连续区间计算

此解法完全满足题目要求,通过维护单调队列高效解决了滑动窗口最小值问题,适合处理大规模数据序列。

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

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

相关文章

飞算JavaAI:重塑Java开发效率的智能引擎

飞算JavaAI:重塑Java开发效率的智能引擎 一、飞算JavaAI核心价值 飞算JavaAI是全球首款专注Java语言的智能开发助手,由飞算数智科技(深圳)有限公司研发。它通过AI大模型技术实现: 全流程自动化:从需求分析→软件设计→代码生成一气呵成工程级代码输出:生成包含配置类、…

Java和Go各方面对比:现代编程语言的深度分析

Java和Go各方面对比&#xff1a;现代编程语言的深度分析 引言 在当今的软件开发领域&#xff0c;选择合适的编程语言对项目的成功至关重要。Java作为一门成熟的面向对象语言&#xff0c;已经在企业级开发中占据主导地位超过25年。而Go&#xff08;Golang&#xff09;作为Google…

CloudCanal:一款企业级实时数据同步、迁移工具

CloudCanal 是一款可视化的数据同步、迁移工具&#xff0c;可以帮助企业构建高质量数据管道&#xff0c;具备实时高效、精确互联、稳定可拓展、一站式、混合部署、复杂数据转换等优点。 应用场景 CloudCanal 可以帮助企业实现以下数据应用场景&#xff1a; 数据同步&#xff…

如何发现 Redis 中的 BigKey?

如何发现 Redis 中的 BigKey&#xff1f; Redis 因其出色的性能&#xff0c;常被用作缓存、消息队列和会话存储。然而&#xff0c;在 Redis 的使用过程中&#xff0c;BigKey 是一个不容忽视的问题。BigKey 指的是存储了大量数据或包含大量成员的键。它们不仅会占用大量内存&…

Golang读取ZIP压缩包并显示Gin静态html网站

Golang读取ZIP压缩包并显示Gin静态html网站Golang读取ZIP压缩包并显示Gin静态html网站1. 读取ZIP压缩包2. 解压并保存静态文件3. 设置Gin静态文件服务基本静态文件服务使用StaticFS更精细控制单个静态文件服务4. 完整实现示例5. 高级优化内存映射优化使用Gin-Static中间件6. 部…

参数列表分类法:基本参数与扩展参数的设计模式

摘要 本文提出了我设计的一种新的函数参数设计范式——参数列表分类法&#xff0c;将传统的"单一参数列表"扩展为"多参数列表协同"模式。通过引入"基本参数列表"和"扩展参数列表"的概念&#xff0c;为复杂对象构建提供了更灵活、更具表…

Ajax之核心语法详解

Ajax之核心语法详解一、Ajax的核心原理与优势1.1 什么是Ajax&#xff1f;1.2 Ajax的优势二、XMLHttpRequest&#xff1a;Ajax的核心对象2.1 XHR的基本使用流程2.2 核心属性与事件解析2.2.1 readyState&#xff1a;请求状态2.2.2 status&#xff1a;HTTP状态码2.2.3 响应数据属性…

ArcGIS 打开 nc 降雨量文件

1. 打开ArcToolbox&#xff0c;依次打开 多维工具 → 创建 NetCDF 栅格图层&#xff0c;将 nc 文件拖入 输入 NetCDF 文件输入框&#xff0c;确认 X维度&#xff08;经度&#xff09;、Y维度&#xff08;经度&#xff09; 的变量名是否正确&#xff0c;点击 确定。图 1 加载nc文…

01-elasticsearch-搭个简单的window服务-ik分词器-简单使用

1、elasticsearch下载地址 如果是其他版本可以尝试修改链接中的版本信息下载 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-windows-x86_64.zip 2、ik分词器下载地址 ik分词器下载的所有版本地址&#xff1a;Index of: analysis-ik/stable/…

[数据结构与算法] 优先队列 | 最小堆 C++

下面是关于 C 中 std::priority_queue 的详细说明&#xff0c;包括初始化、用法和常见的应用场景。什么是 priority_queue&#xff1f; priority_queue&#xff08;优先队列&#xff09;是 C 标准库中的一个容器适配器。它和普通队列&#xff08;queue&#xff09;最大的不同在…

零基础入门物联网-远程门禁开关:硬件介绍

一、成品展示 远程门禁最终效果 二、项目介绍 整个项目主要是实际使用案例为主&#xff0c;根据自己日常生活中用到物联网作品为原型&#xff0c;通过项目实例快速理解。项目分为两部分&#xff1a;制作体验和深入学习。 制作体验部分 会提供所有项目资料及制作说明文档&a…

软件系统国产化改造开发层面,达梦(DM)数据库改造问题记录

本系统前&#xff08;vue&#xff09;后端(java spring boot)为列子&#xff0c;数据库由MySQL--->DM&#xff08;达梦&#xff09;&#xff0c;中间件为中创的国产化相关软件&#xff0c;如tomcat、nginx、redis等。重点讲数据库及代码端的更改&#xff0c;中间件在服务端以…

N8N与Dify:自动化与AI的完美搭配

“N8N”和“Dify”这两个工具彻底理清楚&#xff0c;它们其实是两个定位完全不同的开源平台&#xff0c;各自擅长解决不同类型的问题&#xff0c;但也能协同工作。以下是详细说明&#xff1a;1. n8n&#xff1a;工作流自动化平台定位&#xff1a;n8n 是一个专注于跨系统连接与任…

ARM汇编编程(AArch64架构)课程 - 第5章函数调用规范

目录AAPCS64调用约定参数传递规则返回值规则栈帧管理SP寄存器FP寄存器 (X29)栈帧布局示例AAPCS64调用约定 ARM Architecture Procedure Call Standard for 64-bit (AAPCS64) 参数传递规则 参数位置寄存器分配特殊规则参数1-8X0-X7 (64-bit) / W0-W7 (32-bit)浮点数使用 V0-V7参…

软考(软件设计师)软件工程-成本评估模型,软件能力成熟度,软件配置管理

成本评估模型 Putnam 下面通过一个具体案例&#xff0c;逐步说明Putnam模型的计算过程。我们将开发一个银行核心交易系统&#xff0c;规模为80万行代码&#xff08;LOC&#xff09;&#xff0c;要求24个月内交付。参数符号值说明软件规模L800,000 LOC通过功能点转换获得开发时间…

SASSNet复现

复现结果–Dice&#xff1a;89.354614&#xff0c;Jaccard&#xff1a;80.968917&#xff0c;95HD&#xff1a;7.3987764&#xff0c;误差在接受范围 MethodDiceJaccardJaccard # 感想 第19篇完全复现的论文

大数据学习5:网站访问日志分析

1.数据处理1.1 环境准备进入cd /opt/server/hadoop-3.1.0/sbin文件夹&#xff0c;停止hdfs服务cd /opt/server/hadoop-3.1.0/sbin ./stop-dfs.sh进入/opt/server/hadoop-3.1.0/etc/hadoop文件夹&#xff0c;编辑yarn-site.xml文件/opt/server/hadoop-3.1.0/etc/hadoop vim yarn…

力扣1310. 子数组异或查询

这一题很明显的就是用前缀和异或来解决&#xff0c;只要清楚异或的性质&#xff0c;这一题就十分容易。 对异或的性质的讲解如下&#xff1a; 异或运算解析 具体代码如下&#xff1a; class Solution { public:int sum[30005]; vector<int> xorQueries(vector<int>…

React Native 状态管理方案全面对比

React Native 状态管理方案全面对比 在 React Native 开发中&#xff0c;状态管理是构建复杂应用的核心问题。以下是主流状态管理方案的深度对比分析&#xff1a; 一、基础方案&#xff1a;useState/useReducer 适用场景 简单的组件级状态中等复杂度的局部状态管理不需要跨组件…

基于Python的程序员数据分析与可视化系统的设计与实现

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍背景意义项目展示总结每文一语有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 互联网技术飞速发展&#xff0c;数据分析与可视化在程序员工…