28栈与队列-单调队列
目录
LeetCode之路——239. 滑动窗口最大值
解法一:暴力破解
解法二:单调队列

LeetCode之路——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 <= nums.length <= 105 -
-104 <= nums[i] <= 104 -
1 <= k <= nums.length
解法一:暴力破解
遍历一遍的过程中每次从窗口中再找到最大的数值,时间复杂度O(n*k)。
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int[] window = new int[nums.length - k + 1];for (int i = 0; i < window.length; i++) {int max = nums[i];for (int j = i; j < k + i; j++) {max = Math.max(nums[j], max);}window[i] = max;}return window;}
}
-
时间复杂度:O(n*k)
-
空间复杂度:O(n)
可惜的是,LeetCode提交显示有用例超时了。

解法二:单调队列
单调队列(Monotonic Queue)是一种特殊的队列数据结构,通常用于解决一些特定的算法问题,其中需要维护一组元素,并确保这组元素保持单调性(递增或递减)。
单调队列主要用于解决滑动窗口(Sliding Window)相关的问题,以及一些需要维护局部最大或最小值的问题。它的主要特点是能够快速找到队列中的最大或最小元素。
单调队列通常支持以下操作:
-
在队尾插入元素:通常用于添加新的元素。
-
在队首移除元素:通常用于删除过期的元素。
-
获取队列的最大(最小)元素:通常需要快速找到队列中的最大(最小)元素。
设计单调队列的时候,pop,和push操作要保持如下规则:
-
pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作
-
push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止
保持如上规则,每次窗口移动的时候,只要问que.front()就可以返回当前窗口的最大值。
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int[] result = new int[nums.length - k + 1];LinkedList<Integer> monoQueue = new LinkedList<>();
for (int i = 0; i < nums.length; i++) {// 维护单调递减队列while (!monoQueue.isEmpty() && nums[i] >= nums[monoQueue.getLast()]) {monoQueue.removeLast();}// 单调队列中的元素存放的是下标monoQueue.addLast(i);
// 移除超出窗口范围的元素if (monoQueue.getFirst() < i - k + 1) {monoQueue.removeFirst();}
// 获取窗口内的最大值if (i >= k - 1) {result[i - k + 1] = nums[monoQueue.getFirst()];}}return result;}
}
-
时间复杂度:O(n)
-
空间复杂度:O(k)
相关文章:
28栈与队列-单调队列
目录 LeetCode之路——239. 滑动窗口最大值 解法一:暴力破解 解法二:单调队列 LeetCode之路——239. 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k …...
qt软件崩溃的分析方法-定位源文件和行号
软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也…...
《实验细节》上手使用PEFT库方法和常见出错问题
《实验细节》上手使用PEFT库方法和常见出错问题 安装问题常用命令使用方法保存peft模型加载本地 peft 模型使用问题问题1 ValueError: Please specify target_modules in peft_config安装问题 首先给出用到的网站 更新NVIDIA网站https://www.nvidia.com/Download/index.aspx 2…...
软考高级系统架构论文 注意事项
目录 前言正文 前言 论文主要体现 分析问题的能力以及解决问题的能力 正文 论文必要的点: 虚构情节、文章中有较严重的不真实或者不可信的内容出现的论文;没有项目开发的实际经验、通篇都是浅层次纯理论的论文;所讨论的内容与方法过于陈|旧,或者项目…...
Reasoning with Language Model Prompting: A Survey
本文是LLM系列的文章,针对《Reasoning with Language Model Prompting: A Survey》的翻译。 语言模型提示推理:综述 摘要1 引言2 前言3 方法分类4 比较和讨论5 基准与资源6 未来方向7 结论与视角 摘要 推理作为解决复杂问题的基本能力,可以…...
jenkins pipeline使用
1、jenkins全局配置 1.1、maven配置 1.2、jdk配置 1.3、git配置 2、构建环境配置 2.1、安装时间插件 Date Parameter 2.2、Git Parameter 插件安装 3、pipeline如下 pipeline {agent anyenvironment {image_name "192.168.122.150/ken-test/price-service:${date}&…...
MATLAB——神经网络参考代码
欢迎关注“电击小子程高兴的MATLAB小屋” %% I. 清空环境变量 clear all clc %% II. 训练集/测试集产生 %% % 1. 导入数据 load spectra_data.mat %% % 2. 随机产生训练集和测试集 temp randperm(size(NIR,1)); %打乱60个样本排序 % 训练集——50个样本 P_train NIR(…...
小程序搭建OA项目首页布局界面
首先让我们来学习以下Flex布局 一,Flex布局简介 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性 Flex布局简介 Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的…...
HyperLogLog算法
前言 现在很多站点基本都有统计 PV 和 UV 的需求,PV 的统计很简单,在 Redis 里面维护一个计数器,页面每访问一次计数器就 1,获取 PV 就是读取计数器的值。 相比之下,UV 的统计就比较麻烦了,因为要对用户去…...
自定义Docker镜像--Jupyterlab
概述 自定义Jupyterlab镜像,为deployment做准备 步骤 下载基础镜像:centos:7.9.2009 docker search centos:7.9.2009 docker pull centos:7.9.2009 启动容器 部署应用 # 启动容器 docker run -it --name test centos:7.9.2009 bash# 在容器内部署…...
IDEA中明明导入jar包了,依旧报ClassNotFoundException
解决办法: 1.点击IDEA右上角的设置 2.点击Project Structure... 3.点击Artifacts,点击号把包添加下就可以了...
【VIM TMUX】开发工具 Vim 在 bash 中的显示与 tmux 中的显示不同
开发工具 Vim 在 bash 中的显示与 tmux 中的显示不同-CSDN博客 此方法有效 方法如下: 1.在~/.bashrc中添加 alias tmuxtmux -2 ,然后使配置生效 $source ~/.bashrc . 2.在~/.tmux.conf中添加 set -g default-terminal "screen-256color" 完成之后即可…...
全网最全,Postman接口自动化测试实战整理,避开所有弯路...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 背景描述 项目要…...
蓝桥杯双周赛算法心得——三带一(暴力枚举)
大家好,我是晴天学长,枚举思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .三带一 2) .算法思路 1.通过Scanner读取输入的整数n,表示接下来有n个字符串需要处理。 2.使用循环遍历每个字符串:…...
【C++】适配器模式 - - stack/queue/deque
目录 一、适配器模式 1.1迭代器模式 1.2适配器模式 二、stack 2.1stack 的介绍和使用 2.2stack的模拟实现 三、queue 3.1queue的介绍和使用 3.2queue的模拟实现 四、deque(不满足先进先出,和队列无关) 4.1deque的原理介绍 4.2dequ…...
EKP接口开发Webservice服务和Restservice服务以及定时任务Demo
继承com.landray.kmss.sys.webservice2.interfaces.ISysWebservice,同时在接口上使用WebService注解将其标识为WebService接口 package com.landray.kmss.third.notify.webservice;import com.alibaba.fastjson.JSONObject; import com.landray.kmss.sys.webservic…...
如何确定IP地址的具体位置?
IP地址通过几种方法帮助确定具体位置,尽管它们的准确性和精度因不同的情况而异。以下是几种确定具体位置的主要方法: 地理IP数据库:这是最常用的方法之一,它使用IP地址和地理位置数据的映射来确定用户的位置。这些数据库存储了大量…...
软考-网络安全体系与网络安全模型
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP(Biba-格雷泽-麦克拉伦&#x…...
Java身份证OCR识别 - 阿里云API【识别准确率超过99%】
1. 阿里云API市场 https://market.aliyun.com/products/57124001/cmapi00063618.html?spm5176.28261954.J_7341193060.41.60e52f3drduOTh&scm20140722.S_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi00063618._.ID_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi0006361…...
vue中获取复选框是否被选中的值、如何用JavaScript判断复选框是否被选中
一、方法介绍 第一种方法:通过获取dom元素,getElementById、querySelector、getElementsByName、querySelectorAll(需要遍历,例如:for循环) 第二种是用v-model在input复选框上绑定一个变量,通过…...
MoneyPrinterPlus智能视频创作工具实战指南:从零到批量生产的完整流程
MoneyPrinterPlus智能视频创作工具实战指南:从零到批量生产的完整流程 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhispe…...
FFXIV TexTools深度解析:游戏模组制作框架的技术架构与实战应用
FFXIV TexTools深度解析:游戏模组制作框架的技术架构与实战应用 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI FFXIV TexTools是一款专为《最终幻想14》设计的专业级模组制作与安装框架,为…...
DPDK l2fwd性能调优手记:Hygon 8核+Intel X710网卡,从20G到满速的配置清单
DPDK l2fwd性能调优实战:Hygon 8核X710网卡突破10G瓶颈全记录 当我们在Hygon C86 3250八核处理器与Intel X710 10GbE网卡的硬件组合上部署DPDK l2fwd应用时,初始测试仅达到20Gbps的转发性能,远未达到硬件理论带宽。经过系统级的深度调优&…...
MindStudio组合技,让Host Bound问题看得见、调得准
背景介绍:Host Bound问题在NPU训练和推理场景中,Host侧(CPU)的任务下发(如算子调度、内存分配)与Device侧(NPU)的任务执行是异步进行的。当Host侧任务下发耗时超过Device侧任务执行耗…...
告别元器件搜索焦虑:立创EDA专业版+立创商城联动使用技巧全解析
告别元器件搜索焦虑:立创EDA专业版立创商城联动使用技巧全解析 在电子设计领域,元器件选型与供应链管理一直是工程师面临的核心挑战之一。当项目进入关键阶段,一个看似简单的0.1uF电容缺货或封装不匹配,就可能引发连锁反应&#x…...
告别跑飞!S32K3xx Standby模式唤醒后程序复位?手把手教你用WKPU和RTC保留关键数据
S32K3xx低功耗实战:WKPU与RTC协同解决Standby模式数据丢失难题 引言 在嵌入式系统设计中,低功耗优化一直是工程师们面临的永恒挑战。S32K3xx系列微控制器凭借其出色的电源管理能力,成为汽车电子、工业控制等领域的热门选择。然而,…...
ESP32S3驱动1.3寸圆形AMOLED屏(RM67162芯片)的完整避坑指南:从SPI配置到LVGL局部刷新修复
ESP32S3驱动1.3寸圆形AMOLED屏(RM67162芯片)全流程实战:从SPI配置到LVGL优化 这块1.3寸圆形AMOLED屏幕以其出色的显示效果和独特的外形设计,在智能穿戴设备和小型嵌入式项目中越来越受欢迎。然而,当它与ESP32S3开发板结…...
CircuitPython库管理实战:从安装优化到API深度应用
1. 项目概述与核心价值在嵌入式硬件开发的世界里,CircuitPython以其极低的入门门槛和“即写即得”的交互体验,成为了连接创意与现实的绝佳桥梁。无论是点亮第一颗LED,还是驱动复杂的传感器网络,其丰富的库生态系统都是项目成功的基…...
FreeRTOS互斥信号量实战:用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题
FreeRTOS互斥信号量实战:用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题 在嵌入式系统开发中,多任务并发访问共享资源是一个常见且棘手的问题。想象一下这样的场景:你的STM32设备上有两个任务需要向同一个串口发送数据——一个高优先…...
从电话到流媒体:聊聊G.711、G.726这些老牌音频编码为啥还在用?
从电话到流媒体:G.711与G.726音频编码的生存之道 在数字音频技术日新月异的今天,MP3、AAC、Opus等现代编码格式早已成为流媒体和消费级应用的标配。然而,当你拆开一台最新的IP电话机,或是调试某款工业级语音设备时,大概…...
