力扣239.滑动窗口最大值

文章目录

  • 一、前言
  • 二、单调队列

一、前言

力扣239.滑动窗口最大值

滑动窗口最大值,这道题给定一个数组,以及一个窗口的长度,这个窗口会往后滑动,直到数组最后一个元素。

要求每个滑动窗口的中的最大值。对于这道题,我刚看到的时候没有比较好的思路,心里想没思路?直接一个无脑暴力!

暴力的思路就是遍历数组的时候,每次遍历滑动窗口找出最大值!

果然,超时了。。。。。。

image-20241214155929713

遍历数组的时间复杂度是O(n),如果当滑动窗口的长度为n/2的时候,遍历滑动窗口找出最大值的时间复杂度是O(n),那么整体的暴力算法的时间复杂度是O(n²)。


二、单调队列

正所谓“空间换时间”,所以在这题中,想要降低时间复杂度,那就要牺牲一点空间,用空间来换时间。

这道题单看数组可能不是很直观,如果将数组转化为折线图,那么就能看出规则了!

假设现在有一个这样的数组,nums = [2,1,4,2,3,2], k = 3,该数组的折线图如下所示。

image-20241214161043730

[2,1,4]这个滑动窗口里面,最大值的4,但是2和1有没有可能作为滑动窗口的最大值呢?

这个是不可能的,因为4在2和1的右边,包含了1或2的滑动窗口必然包含了4,因此4会是最大值,而2和1没有机会成为最大值,于是就需要记录4。

随着滑动窗口往下往下滑动,那么滑动窗口为[1,4,2],最大值仍然为4,前面说了1是不可能有成为最大值的记录,那么这里的2有成为最大值的机会么?

很显然,是有可能的,因为2在4的右边,而且2后面的数字还不知道,有可能是比2小,并且在后面包含了2的滑动窗口中,可能不会包含4,因此2有可能成为最大值,于是需要将2记录下来。

窗口继续往下滑动,滑动窗口为[4,2,3],最大值为4,由于这次有3,3比2大,和前面一样,有3在,2不可能成为最大值,于是移除前面记录的2,而是将3进行记录。

窗口继续滑动,滑动窗口为[2,3,2],这时候4已经超出滑动窗口范围,需要在前面记录的数据中移除,于是这次滑动窗口的最大值就是3了

整体思路如上所示,这里需要用到一个数据结构——单调队列,思路如下:

  1. 入队列,将元素添加到队尾,并且需要维持队列的单调性(队列从大到小排序)
  2. 出队列,当元素超出滑动窗口的范围的时候,需要出队列
  3. 记录答案,每次滑动窗口的最大值就是队列的首部!
public int[] maxSlidingWindow(int[] nums, int k) {int[] res = new int[nums.length - k + 1];Deque<Integer> queue = new LinkedList<>();for (int i = 0; i < nums.length; i++) {while (!queue.isEmpty() && nums[i] > nums[queue.getLast()]){// 维持单调性queue.removeLast();}if (!queue.isEmpty() && i - queue.getFirst() >= k){queue.removeFirst();}queue.addLast(i);if (i >= k - 1){// 收集结果res[i - k + 1] = nums[queue.getFirst()];}}return res;
}

image-20241214162540951
解决!下班!!!


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

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

相关文章

mac 安装CosyVoice (cpu版本)

CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址&#xff1a;https://github.com/FunAudioLLM/CosyVoice.git 下载项目&#xff08;非官方&#xff09; git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…

电脑插件修复工具

DirectX修复工具 链接&#xff1a;夸克网盘分享

Maven 安装配置(详细教程)

文章目录 一、Maven 简介二、下载 Maven三、配置 Maven3.1 配置环境变量3.2 Maven 配置3.3 IDEA 配置 四、结语 一、Maven 简介 Maven 是一个基于项目对象模型&#xff08;POM&#xff09;的项目管理和自动化构建工具。它主要服务于 Java 平台&#xff0c;但也支持其他编程语言…

Scala中的泛型特质

代码如下&#xff1a; package test41 //泛型特质 object test3 { //定义一个日志//泛型特质&#xff0c;X是泛型名称&#xff0c;可以更改。trait Logger[X] {val content: Xdef show():Unit }class FileLogger extends Logger[String] {override val content: String "…

前端三大框架 Vue、React 和 Angular 的市场占比分析

一、引言 ?? 随着前端技术的迅速发展&#xff0c;Vue.js、React 和 Angular 已成为全球最受欢迎的三大前端框架。在国内外&#xff0c;不同的框架在市场中的占比和流行程度存在显著差异。本文将从全球和中国市场的角度&#xff0c;对这三大框架的市场占比进行分析&#xff0…

vue3+echarts+websocket分时图与K线图实时推送

一、父组件代码&#xff1a; <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…

用python的flask写的一个MQTT中转功能,http的方式发送数据和接收数据

需求背景 给一个客户对接人脸识别的设备&#xff0c;最后需要通知服务端进行一些消息推送。 简单例子 # 作者 陈老师 # https://v.iiar.cn import json import paho.mqtt.client as mqtt import requests from flask import Flask, requestapp Flask(__name__)# MQTT配置 mq…

ASP.NET |日常开发中读写XML详解

ASP.NET &#xff5c;日常开发中读写XML详解 前言一、XML 概述1.1 定义和结构1.2 应用场景 二、读取 XML 文件2.1 使用XmlDocument类&#xff08;DOM 方式&#xff09;2.2 使用XmlReader类&#xff08;流方式&#xff09; 三、写入 XML 文件3.1 使用XmlDocument类3.2 使用XmlWr…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后&#xff0c;我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态&#xff0c;这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

Spring Boot 实战:构建一个社交平台 API

在这篇博客中&#xff0c;我们将继续深入 Spring Boot 的开发实践&#xff0c;通过构建一个简单的社交平台 API&#xff0c;帮助大家理解如何使用 Spring Boot 高效地开发一个具有注册、登录、个人资料管理、帖子发布与评论、点赞等功能的社交平台。在开发过程中&#xff0c;我…

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)

目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…

智能家居WTR096-16S录放音芯片方案,实现语音播报提示及录音留言功能

前言&#xff1a; 在当今社会的高速运转之下&#xff0c;夜幕低垂之时&#xff0c;许多辛勤工作的父母尚未归家。对于肩负家庭责任的他们而言&#xff0c;确保孩童按时用餐与居家安全成为心头大事。此时&#xff0c;家居留言录音提示功能应运而生&#xff0c;恰似家中的一位无形…

Java 编程基础:开启编程世界的大门

一、Java 环境搭建 在开始编写 Java 代码之前&#xff0c;我们需要先搭建 Java 开发环境。 1. 安装 JDK&#xff08;Java Development Kit&#xff09; JDK 是 Java 开发的核心工具包&#xff0c;它包含了编译 Java 源文件所需的编译器&#xff08;javac&#xff09;以及运行…

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…

【SickOs1.1靶场渗透】

文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP&#xff1a;192.168.20.146 靶机IP&#xff1a;192.168.20.150 二、信息收集 端口扫描 nmap -sS -sV -p- -A 192.168.20.150 开放了22、3128端口&#xff0c;8080端口显示关闭 22端…

【HF设计模式】03-装饰者模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第3章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍装饰者模式&#xff0c;包括遇到的问题、遵循的 OO 原则、达到的效果。 …

Mysql数据库中,什么情况下设置了索引但无法使用?

在MySQL数据库中&#xff0c;即使已经正确设置了索引&#xff0c;但在某些情况下索引可能无法被使用。 以下是一些常见的情况&#xff1a; 1. 数据分布不均匀 当某个列的数据分布非常不均匀时&#xff0c;索引可能无法有效地过滤掉大部分的数据&#xff0c;导致索引失效。 …

秒杀业务中的库存扣减为什么不加分布式锁?

前言 说到秒杀业务的库存扣减&#xff0c;就还是得先确认我们的扣减基本方案。 秒杀场景的库存扣减方案 一般的做法是&#xff0c;先在Redis中做扣减&#xff0c;然后发送一个MQ消息&#xff0c;消费者在接到消息之后做数据库中库存的真正扣减及业务逻辑操作。 如何解决数据…

ChatGPT生成测试用例的最佳实践(一)

前面介绍的案例主要展示了ChatGPT在功能、安全和性能测试用例生成方面的应用和成果。通过ChatGPT生成测试用例&#xff0c;测试团队不仅可以提升工作效率&#xff0c;还可以加快测试工作的速度&#xff0c;尽早发现被测系统中的问题。问题及早发现有助于提高软件的质量和用户满…