Leetcode刷题记录22——滑动窗口最大值

题源:https://leetcode.cn/problems/sliding-window-maximum/description/?envType=study-plan-v2&envId=top-100-liked

题目描述:
在这里插入图片描述

思路一:
暴力遍历法,通过一个长度为k的滑动窗口遍历nums,将其中最大的数依次记录下来,返回即可,代码如下:

class Solution(object):def maxSlidingWindow(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""max_num = []for i in range(len(nums) - k + 1):max_num.append(max(nums[i:i+k]))return max_num

不用想肯定超时了,困难题怎么会这么简单呢:
在这里插入图片描述
测试一下时间,确实太长了:
在这里插入图片描述

思路二:
使用双端队列:

步骤 1: 初始化队列

  • 初始时,将前 k 个元素依次加入队列。
  • 加入规则:如果队列末尾的元素小于当前元素,则移除末尾元素,直到队列为空或遇到更大的元素。然后将当前元素的索引加入队列。

例子:
初始窗口 [1,3,-1] 的处理:

  • 队列为空 → 加入 0(对应 1)。
  • 3 > 1 → 移除 0,加入 1(对应 3)。
  • -1 < 3 → 直接加入 2(对应 -1)。
    此时队列是 [1,2],对应的值为 [3,-1],队头是 3。

步骤 2: 处理后续元素
从第 k 个元素开始,每次窗口滑动一位:

  • 移除超出窗口范围的旧元素:
    如果队列头部的索引已经不在当前窗口范围内(即 <= i - k),则将其弹出。
  • 维护单调队列:
    将当前元素 nums[i] 加入队列时,同样遵循规则:移除所有比它小的元素索引,然后将当前索引加入队列。
  • 记录当前窗口的最大值:
    当窗口形成后(即 i >= k-1),队列头部的索引对应的值就是当前窗口的最大值。

例子:
继续处理 nums[3] = -3(窗口 [3,-1,-3]):

  • 窗口起始位置是 i - k + 1 = 1,检查队列头部的 1(对应 3)是否在窗口内(1 >= 1 ,不需要移除)。
  • nums[3] = -3 小于队列末尾的 -1(索引 2),直接加入队列。
    此时队列是 [1,2,3],对应值为 [3,-1,-3],最大值是 3。

代码实现如下:

class Solution(object):def maxSlidingWindow(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""  result = []              # 存储最终结果q = deque()              # 双端队列,存储索引for i in range(len(nums)):# Step 1: 移除超出窗口范围的索引while q and q[0] <= i - k:q.popleft()# Step 2: 维护单调队列(移除比当前元素小的索引)while q and nums[q[-1]] < nums[i]:q.pop()# Step 3: 添加当前索引q.append(i)# Step 4: 当窗口形成后,记录最大值if i >= k - 1:result.append(nums[q[0]])return result

执行用时如下:
在这里插入图片描述

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

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

相关文章

Apache Flink的架构设计与运行流程说明

在大数据领域&#xff0c;实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控&#xff0c;从物联网设备的实时告警到社交平台的热点追踪&#xff0c;企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中&a…

经典算法 最长单调递增子序列

最长单调递增子序列 问题描述 找出由n个数组成的序列的最长单调递增子序列。 示例输入 9 2 1 5 3 6 4 8 9 7示例输出 5示例输入 6 5 6 7 1 2 8示例输出 4c代码(动态规划 O(n^2)) #include<bits/stdc.h>using namespace std;int main() {int n, ans 0;cin >&g…

【语法】C++继承中遇到的问题及解决方法

目录 1.子类构造函数中初始化父类成员 2.子类显式调用父类的析构函数 第一种说法&#xff1a;重定义 反驳&#xff1a; 第二种说法&#xff1a;operator~ 3.因编译器版本过低而出现错误 贴主在学习C的继承时&#xff0c;遇到了很多问题&#xff0c;觉得很变态&#xff0c…

前缀和 后缀和 --- 寻找数组的中心下标

题目链接 寻找数组的中心下标 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为…

NVIDIA --- 端到端自动驾驶

前言 参加了NVIDIA 高级辅助驾驶开发者实验室的活动&#xff0c;本次活动基于 NVIDIA 汽车行业的端到端解决方案——DRIVE AGX™ 平台&#xff0c;实现高级别智能和安全性的软硬件开发工具和 AV 基础设施。并且NVIDIA自动驾驶实验室推出了一系列自动驾驶算法最新的前沿研究视频…

SQL实战:03之SQL中的递归查询

文章目录 概述SQL 中的递归实现题目一:分析组织层级题解题目二:树节点求解题解步骤一&#xff1a;通过递归查询出每个节点的上级节点和下级节点分布步骤二&#xff1a;分组统计 概述 最近刷题时遇到了一道需要根据组织层级来统计各个层级的一些数据&#xff0c;当时碰到时的第…

MySQL 语法与基础完全指南

MySQL 是最流行的开源关系型数据库管理系统之一&#xff0c;广泛应用于 Web 应用程序开发。本文将全面介绍 MySQL 的基础知识和完整语法结构。 一、MySQL 基础概念 1. 数据库基本术语 数据库(Database): 存储数据的集合 表(Table): 数据以表格形式组织 列(Column): 表中的一…

【Sqlalchemy Model转换成Pydantic Model示例】

【Sqlalchemy Model转换成Pydantic Model示例】 由于Sqlalchemy和Pydantic的模型字段类型可能有差异, 所以需要一个通用的装换类 def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函数&#xff0c;将 SQLAlchemy 模型实例转换为 Pyd…

2025年欧洲西南部大停电

2025年4月28日&#xff0c;欧洲西南部出现大规模停电&#xff0c;西班牙、葡萄牙和法国南部均受到影响。有报道指出停电可能与 欧洲电网出现问题有关&#xff0c;但最终原因尚未确定。由于停电&#xff0c;上述地区的交通和通信服务均受到严重影响&#xff0c;交通信号灯停止工…

Java EE初阶——计算机是如何工作的

1. cpu 冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; • CPU 中央处理器: 进⾏算术运算和逻辑判断. • 存储器: 分为外存和内存, ⽤于存储数据(使⽤⼆进制⽅式存储) • 输⼊设备: ⽤⼾给计算机发号施令的设备. • 输出设备: 计算机个⽤⼾汇报结果的设…

飞鸟游戏模拟器 1.0.3 | 完全免费无广告,内置大量经典童年游戏,重温美好回忆

飞鸟游戏模拟器是一款专为安卓用户设计的免费游戏模拟器&#xff0c;内置了大量经典的童年游戏。该模拟器拥有丰富的游戏资源&#xff0c;目前已有约20,000款游戏&#xff0c;包括多种类型如冒险、动作、角色扮演等。用户可以直接搜索查找想要玩的游戏进行下载并启动。游戏库中…

网络爬取需谨慎:警惕迷宫陷阱

一、技术背景:网络爬虫与数据保护的博弈升级 1. 问题根源:AI训练数据爬取的无序性 数据需求爆炸:GPT-4、Gemini等大模型依赖数万亿网页数据训练,但大量爬虫无视网站的robots.txt协议(非法律强制),未经许可抓取内容(如新闻、学术论文、代码),引发版权争议(如OpenAI被…

Qwen3简介:大型语言模型的革命

Qwen3简介&#xff1a;大型语言模型的革命 Qwen系列语言模型的最新发布——Qwen3&#xff0c;标志着人工智能&#xff08;AI&#xff09;技术的一次重大飞跃。基于前代版本的成功&#xff0c;Qwen3在架构、推理能力和多项先进功能上都取得了显著提升&#xff0c;正在重新定义大…

MODSIM选型指南:汽车与航空航天企业如何选择仿真平台

1. 引言 在竞争激烈的汽车与航空航天领域&#xff0c;仿真技术已成为产品研发不可或缺的环节。通过在设计阶段验证概念并优化性能&#xff0c;仿真平台能有效缩短开发周期并降低物理样机制作成本。 MODSIM&#xff08;建模与仿真&#xff09;作为达索系统3DEXPERIENCE平台的核…

linux 内核 debugfs 使用介绍

一&#xff1a;概述 debugfs 是 Linux 内核提供的一个特殊的虚拟文件系统&#xff0c;用于 暴露内核模块&#xff08;如驱动&#xff09;内部的调试信息或控制接口&#xff0c;供开发者、调试人员实时查看和排查问题。即 debugfs 就是一个“调试专用的 /proc 或 /sys”&#xf…

ZYNQ笔记(十五):PL读写PS DDR(自定义IP核-AXI4接口)

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任务&#xff1a;PL 端自定义一个 AXI4 接口的 IP 核&#xff0c;通过 AXI_HP 接口对 PS 端 DDR3 进行读写 测试&#xff0c;读写的内存大小是 4K 字节&#xff0c; 目录 一、介绍 &#xff08;1&#xff09;…

Redis 小记

Redis 命令小记 Redis 是一个文本/二进制数据库&#xff08;textual/binary database&#xff09; CLI 命令 redis-cli, redis-server, redis-benchmark, redis-check-dump, redis-check-aof redis-cli 执行命令 # 方式 1 redis-cli -h 127.0.0.1 -p 6379 > 127.0.0.1:63…

如何在idea中编写spark程序

在 IntelliJ IDEA 中编写 Spark 程序的详细指南 在大数据处理领域&#xff0c;Apache Spark 凭借其强大的分布式计算能力&#xff0c;成为了众多开发者的首选工具。而 IntelliJ IDEA 作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为编写 Spark 程序…

各类神经网络学习:(十一)注意力机制(第3/4集),位置编码

上一篇下一篇注意力机制&#xff08;2/4集&#xff09;注意力机制&#xff08;4/4集&#xff09; 位置编码 R N N RNN RNN 和 L S T M LSTM LSTM 这些网络都是串行执行的&#xff0c;在潜移默化中&#xff0c;就包含了顺序关系&#xff0c;也就是词序关系。而注意力机制是并行…

《Python Web部署应知应会》Flask网站隐藏或改变浏览器URL:从Nginx反向代理到URL重写技术

Flask网站隐藏或改变浏览器显示URL地址的实现方案&#xff1a;从Nginx反向代理到URL重写技术 引言 在Web应用开发中&#xff0c;URL路径的安全性往往被忽视&#xff0c;这可能导致网站结构和后端逻辑被攻击者轻易推断。对于Flask框架开发的网站&#xff0c;如何隐藏或改变浏览…