Leetcode 239:滑动窗口最大值

题意
大小为 k 的滑动窗口从整数数组 nums 的最左侧移到最右侧,只能看到滑动窗口中的 k 个数字,窗口每次向右移动一位。

返回滑动窗口的最大值。

示例 1:
输入: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

示例 2:
输入:nums = [1], k = 1
输出:[1]

提示:

1 <= nums.length <= 105
-104 <= nums[i] <= 104
1 <= k <= nums.length

普通队列是限制仅在队尾进行插入,在队头进行删除操作的线性表,队列的插入叫做入队列,队列的删除叫做出队列。
双端队列则是放开了这个限制,在队头和队尾两端都可以进行入队和出队操作的队列。
单调队列,所有队列里的元素都是按递增(递减)的顺序队列,这个队列的头是最小(最大)的元素。

题解
首先窗口向右滑动的过程就是将窗口最左侧的元素删除,同时在窗口的最右侧添加一个新的元素,这就要用到双端队列,然后找双端队列中的最大元素。

那剩下就是如何找到滑动窗口中的最大值。

那我们就可以只在队列中保留可能成为窗口最大元素的元素,去掉不可能成为窗口中最大元素的元素。

想象一下,如果要进来的是个值大的元素,那一定会比之前早进去的值小的元素晚离开队列,而且值大的元素在,都没值小的元素啥事,所以值小的元素直接弹出队列即可。

这样队列里其实维护的一个单调递减的单调队列。

python:

class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 如果数组为空或 k = 0,直接返回空if not nums or not k:return []# 如果数组只有1个元素,直接返回该元素if len(nums) == 1:return [nums[0]]# 初始化队列和结果,队列存储数组的下标queue = []res = []for i in range(len(nums)):# 如果当前队列最左侧存储的下标等于 i-k 的值,代表目前队列已满。# 但是新元素需要进来,所以列表最左侧的下标出队列if queue and queue[0] == i - k:queue.pop(0)# 对于新进入的元素,如果队列前面的数比它小,那么前面的都出队列while queue and nums[queue[-1]] < nums[i]:queue.pop()# 新元素入队列queue.append(i)# 当前的大值加入到结果数组中if i >= k-1:res.append(nums[queue[0]])return res

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

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

相关文章

[leetcode 26][删除有序数组的重复项]

[leetcode 26][删除有序数组的重复项] 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O…

一家新店怎么快速出体验分?教大家一个简单好用的方法,建议收藏

大家好&#xff0c;我是电商花花。 在现在直播电商时代&#xff0c;抖音电商已经成为了一种新兴的商业模式&#xff0c;在抖音小店的项目上&#xff0c;店铺体验分成为了抖音小店能否成功的一个关键因素之一。 店铺的体验分越高&#xff0c;我们店铺的权重才会更高&#xff0…

04.if判断

04.if判断 01.if判断02.运算符2.比较&#xff08;关系&#xff09;运算符3.逻辑运算符4.三目运算符&#xff08;三元表达式&#xff09; &#xff08;03&#xff09;5.if-else6.if-elif结构 04.if嵌套7.if嵌套 01.if判断 if判断基本格式 基本格式 if 要判断的条件&#xff1a;…

掘根宝典之C语言和C++中的const

const的基本概念 const名叫常量限定符&#xff0c;用来限定特定变量&#xff0c;以通知编译器该变量是不可修改的。 习惯性的使用const&#xff0c;可以避免在函数中对某些不应修改的变量造成可能的改动。 const修饰基本数据类型 2.1 const修饰一般常量及数组 int const a…

MAth类与Random类

Math类 Math类是Java编程语言中的一个工具类&#xff0c;它包含了一系列用于执行基本数学运算的静态方法&#xff1b;由于Math类中构造方法的访问权限是private&#xff0c;所以无法创建Math类的对象&#xff1b;Math类中的所有方法都是静态方法&#xff0c;可以通过类名直接调…

CSS复合选择器(三)

伪元素选择器 作用&#xff1a;选中元素中的一些特殊位置。 常用伪元素&#xff1a; ::first-letter 选中元素中的第一个文字。::first-line 选中元素中的第一行文字。::selection选中被鼠标选中的内容。::placeholder 选中输入框的提示文字。::before 在元素最开始的位置&…

1.BOM-获取元素(获取元素、修改属性)

web Api基本认知 作用&#xff1a;通过JS去操作html页面和浏览器(实现浏览器中的某些功能) 分类&#xff1a; DOM(网页)&#xff1a;Document Object Model(文档对象模型) BOM(浏览器)&#xff1a;Borwser Object Model(浏览器对象模型) DOM DOM树 将网页中标签的关系以树状…

利用excel批量修改图片文件名

今天同事提出需求要实现利用excel批量修改某文件夹下的图片重命名&#xff0c;衡量到各种条件&#xff0c;最后还是选择了vbs来实现。代码如下 代码 创建Excel对象 Set objExcel CreateObject("Excel.Application") objExcel.Visible False 隐藏Excel窗口 打开Ex…

react:usecontext使用

useContext返回 调用组件上方最近的 SomeContext.Provider 的 value 如果没有这样的 provider 传递给 createContext 的 defaultValue。返回的值始终是最新的。 如果 context 发生变化&#xff0c;React 会自动重新渲染读取 context 的组件。 <Context.Provider> 需要位于…

【MySQL知识体系】第2章 数据库与表的创建(一)

第2章 数据库与表的创建 2.1 数据库操作 2.2 表操作 文章目录 第2章 数据库与表的创建2.1 数据库操作2.1.1 创建第一个数据库2.1.2 更新数据库名称&#xff08;数据库创建后无法修改名称&#xff09;2.1.3 删除数据库2.1.4 取个合适的数据库名称 第2章 数据库与表的创建 2.1 数…

990-40产品经理:What Is Effective Written Communication? 什么是有效的书面沟通?

The purpose of written communication is to capture your reader’s attention and get your point across clearly. Ultimately, when you communicate in writing, you are helping the reader understand your perspective看法 on a topic. There are certain qualities a…

在 echarts 的 rich 中使用 iconfont 图标库图标作为 backgroundColor.image 值的方法

实现步骤 1、引入 iconfont.js。该脚本执行时&#xff0c;会在 body 下插入一个 svg 标签&#xff0c;标签下包含了图标库中的 svg 图标 path。 <script src"your/iconfont/path/iconfont.js"></script>或者 import your/iconfont/path/iconfont.js2、…

【学习心得】websocket协议简介并与http协议对比

一、轮询和长轮询 在websocket协议出现之前&#xff0c;要想实现服务器和客户端的双向持久通信采取的是Ajax轮询。它的原理是每隔一段时间客户端就给服务器发送请求找服务器要数据。 让我们通过一个生活化的比喻来解释轮询和长轮询假设你正在与一位不怎么主动说话的老大爷&…

基于R语言lavaan的SEM在复杂统计建模中的科研技术新突破

此外&#xff0c;我们还将深入探讨R语言的基础知识、结构方程模型的基本原理、lavaan程序包的使用方法等内容。无论是潜变量分析、复合变量分析&#xff0c;还是非线性/非正态/缺失数据处理、分类变量分析、分组数据处理等复杂问题&#xff0c;我们都将一一为您解析。 希望通过…

3.7作业

网络聊天室&#xff1a; 程序代码&#xff1a; ser.c #include <myhead.h> //定义消息类型结构体 struct xiaoxi {char type;char name[20];char text[100]; };int main(int argc, const char* argv[]) {// 创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0);if (s…

Spring源码:手写AOP

文章目录 一、概念1、AOP是什么&#xff1f;2、相关概念1&#xff09;目标对象Target2&#xff09;通知Advice3&#xff09;连接点Joinpoint4&#xff09;切点Pointcut5&#xff09;切面Aspect6&#xff09;织入Weaving 二、分析三、实现1、实现Advice1&#xff09;前置通知2&a…

蓝桥杯-Stack

Stack实例化步骤 1导包&#xff0c;导入java.util.* 2实例化对象&#xff0c;格式如下 Stack<引用数据类型> stacknew Stack<>(); Stack特点&#xff1a;先进后出。比如1&#xff0c;2&#xff0c;3依次入栈&#xff0c;出栈顺序就是3&#xff0c;2&#xff0c…

企业微信HOOK协议,新设备二次验证处理

提示设备强制二次验证问题已处理 HOOK&#xff1a;https://www.showdoc.com.cn/1663062930779972/7859611259700402密码&#xff1a;999999999

大数据冷热分离方案

数据冷热分离方案 1、背景 ​ 随着业务的发展&#xff0c;在线表中的数据会逐渐增加。常规业务都有冷热数据现象明显的特性&#xff08;需要访问的都是近期产生的热数据&#xff1b;时间久远的冷数据出于备份、备案溯源等诉求会进行在线保留&#xff09;。在业务表数据 量可控…

安卓玩机工具推荐----高通芯片9008端口读写分区 备份分区 恢复分区 制作线刷包 工具操作解析

上期解析了下adb端口备份分区的有关操作 安卓玩机工具推荐----ADB状态读写分区 备份分区 恢复分区 查看分区号 工具操作解析 在以往的博文中对于高通芯片机型的分区读写已经分享了很多。相关类似博文 安卓备份分区----手动查询安卓系统分区信息 导出系统分区的一些基本操作 …