滑动窗口(单调栈)

239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 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       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

单调队列套路
1.入(元素进入队尾,同时维护队列单调性)
2.出(元素离开队首)
3.记录/维护答案(根据队首)

思路:

我们首先定义一个双向队列,通过单调关系变成一个单调栈

遍历数组,当栈不为空,并且遍历到的值比栈的末尾值大的时候,while去除栈的末尾,最后加入到栈中,注意这里是将下标加入栈中而不是数据

当此时for循环的下标比数组最大值下标大于等于3,即使队首是最大值,也要出栈,因为滑动窗口的大小为3

队列存放的下标对应nums里的元素严格意义上是单调递减的,队首是最大值=q【0】,每次遍历都和队尾nums【q【-1】】比较

代码:

class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:ans=[]q=deque()for i,x in enumerate(nums):#1.元素进入窗口while q and nums[q[-1]]<=x:q.pop()q.append(i)#2.元素离开窗口if i-q[0]==k:q.popleft()#3.记录答案if i>=k-1:ans.append(nums[q[0]])return ans


 

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

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

相关文章

Redis精要

一、什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 缓存穿透 【针对大量非法访问的请求&#xff0c;缓存中没有&#xff0c;直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据&#xff0c;这样每次请求直接打到数据库&#xff0c;就好像缓存不存在 一样。 对于系…

JVM-GC-常用调优命令和GC参数

定位问题常用命令 top&#xff1a;查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息&#xff0c;一般查看线程状态&#xff0c;判断是否死锁。重点观察&#xff1a;WAITING、BLOCKED的线程&#xff0c;另外查看wait…

移动平均法

移动平均法是一种基于时间序列数据来预测未来值或分析数据趋势的常用方法。它主要用于预测未来一期或几期内公司产品的需求量、公司产能等。以下是对移动平均法的详细解释&#xff1a; 基本原理 移动平均法的基本原理是通过消除时间序列资料中的不规则和其他变动&#xff0c;…

全面的WAS存储权限管理方案,了解一下

WAS存储权限管理通常指的是对Windows Azure Storage&#xff08;WAS&#xff09;的存储设备进行权限控制和管理。在企业中&#xff0c;随着数据量的飞速增长&#xff0c;对存储设备的安全性、效率和成本的关注也日益增加。有效的WAS存储权限管理可以确保数据的安全性&#xff0…

UV胶带和UV胶水的应用场景有哪些不同吗?

UV胶带和UV胶水的应用场景有哪些不同吗? UV胶带和UV胶水的应用场景确实存在不同之处&#xff0c;以下是详细的比较和归纳&#xff1a; 一&#xff1a;按使用场景来看&#xff1a; UV胶带的应用场景&#xff1a; 包装行业&#xff1a;UV胶带在包装行业中常用于食品包装、药…

python 格式化字符串的方法

在 Python 中&#xff0c;格式化字符串有多种方法&#xff0c;每种方法都有其独特的优点和适用场景。以下是几种常用的格式化字符串的方法&#xff1a; 1.使用百分号 (%) 运算符 这是 Python 中最早的字符串格式化方式&#xff0c;类似于 C 语言中的 printf。 name "A…

深圳比创达电子|EMC与EMI一站式解决方案:源头到终端的全面防护

随着电子技术的飞速发展&#xff0c;电磁兼容性&#xff08;EMC&#xff09;和电磁干扰&#xff08;EMI&#xff09;问题日益成为产品研发和生产的关键因素。为了帮助企业更好地应对这些挑战。 一、EMC与EMI的基本概述 电磁兼容性&#xff08;EMC&#xff09;是指设备或系统在…

uniswap、pancakeswap、shadowswap、有什么区别

Uniswap、PancakeSwap和ShadowSwap是三个不同的去中心化交易所&#xff08;Decentralized Exchanges&#xff0c;简称DEXs&#xff09;&#xff0c;它们在各自的区块链生态系统中运作&#xff0c;并且有各自的特点和优势。下面是它们之间的一些主要区别&#xff1a; Uniswap 平…

【Linux】ss 命令使用详解

目录 一、ss命令介绍 二、ss命令格式和使用 1、命令格式 2、ss命令的常用选项 3、命令的常见用法 3.1 找出打开套接字/端口应用程序 3.2 检查系统的监听套接字 3.3 显示所有状态为established的SMTP连接 3.4 查看建立的 TCP 连接 3.5 通过 -r 选项解析 IP 和端口号 …

12通道温振信号采集卡

12 通道智能数据采集器&#xff0c;以下简称 SG-Vib-S12。 SG-Vib-S12 旨在帮助用户对工业生产中的设备健康状况进行监测与诊断&#xff0c; 降低因设备故障对生产过程产生的影响。SG-Vib-S12 输入同时兼容 IEP、ICP 两 线制、三线制&#xff08;振温一体&#xff09;传感器&…

【html】如何利用hbuilderX 开发一个自己的app并安装在手机上运行

引言&#xff1a; 相信大家都非常想开发一款自己的apk&#xff0c;手机应用程序&#xff0c;今天就教大家&#xff0c;如何用hbuilderX 开发一个自己的app并安装在手机上运行。 步骤讲解&#xff1a; 打开hbuilderX &#xff0c;选择新建项目 2.选择5app,想一个名字&#x…

js三元图的画法

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>三元图</title></head> <body>&l…

爬虫超详细介绍

爬虫&#xff08;Spider&#xff09;是一种自动化程序&#xff0c;用于在互联网上获取信息。 其工作原理主要可以分为以下几个步骤&#xff1a; 发起请求&#xff1a; 爬虫首先需要向目标网站发起HTTP请求&#xff0c;以获取网页的内容。这个请求可以包含一些额外的信息&…

使用 Java 构建和消费 RESTful 服务的基本方法

REST&#xff08;Representational State Transfer&#xff09;是一种架构风格&#xff0c;它基于Web标准和HTTP协议&#xff0c;常用于构建网络服务。使用Java构建和消费RESTful服务需要掌握一些基本概念和技术。 一、RESTful服务的基本概念 1. REST架构风格 REST架构风格的…

C++身份核验接口-守护网络安全从身份证实名认证开始

说起安防&#xff0c;大家想到的都是国家、政府、机构等&#xff0c;其实做这些的最终目的是为了保障国家、个人的安全&#xff0c;如果个人的安全都是未知那凭什么去说更高层面的安防呢。 江歌遇害案最近在各媒体都占据了醒目的位置&#xff0c;目前陈世峰已经承认杀人&#…

NGINX_二十 nginx 监控

二十 nginx 监控 1 nginx的基础监控 进程监控端口监控 注意&#xff1a; 这两个是必须要加在zabbix监控&#xff0c;加触发器有问题及时告警。 web 服务器 nginx 以其高性能与抗并发能力越来越多的被用户使用 作为一款服务器产品&#xff0c;其运行状态是运维密切关注的&a…

【机器学习 复习】第3章 K-近邻算法

一、概念 1.K-近邻算法&#xff1a;也叫KNN 分类 算法&#xff0c;其中的N是 邻近邻居NearestNeighbor的首字母。 &#xff08;1&#xff09;其中K是特征值&#xff0c;就是选择离某个预测的值&#xff08;例如预测的是苹果&#xff0c;就找个苹果&#xff09;最近的几个值&am…

项目六 OpenStack虚拟机实例管理

任务一 理解OpenStack计算服务 1.1 •什么是Nova • Nova是OpenStack中的计算服务项目 &#xff0c;计算虚拟机实例生命周期的所有活动都由 Nova 管理 。 • Nova 提供统一的计算资源 服务。 • Nova 需要下列 OpenStack 服务的 支持。 Keystone &#xff1a;为所有的 OpenSt…

单商户社区团购卖菜卖水果商城自提点商城系统小程序源码

打造便捷团购新体验 &#x1f34e; 引言&#xff1a;社区团购的崛起 近年来&#xff0c;社区团购以其独特的优势&#xff0c;迅速崛起并受到广大消费者的喜爱。它不仅能够提供物美价廉的商品&#xff0c;还能让居民们享受到更加便捷的购物体验。而单商户社区团购系统小程序&am…

Python的进程、线程和协程

在Python中&#xff0c;进程、线程和协程是处理并发和并行任务的三种主要方式。下面我将对它们进行简要的比较&#xff0c;并提供一些示例代码。 进程&#xff08;Process&#xff09; 进程是操作系统进行资源分配和调度的基本单位&#xff0c;它包含独立的内存空间、系统资源…