力扣239. 滑动窗口最大值

Problem: 239. 滑动窗口最大值

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

1.编写实现优先队列类:

1.1.实现push(int n):将元素n添加到队列尾,同时将n前面大于n的元素删除
1.2.实现int max():将队列头元素取出(由于实现了push所以此时队列头元素为当前队列中的最大值)
1.3.实现pop(int n):将队列头的元素n删除(代码实现中,需要先检查n是否还在当前对头。因为n有可能已经删除掉了)

2.题目代码逻辑实现:

2.1.生成窗口:将前k个元素添加到实现的优先队列中;
2.2.维护窗口:每次push一个新的元素到窗口,再取出当前窗口中的最大值添加到结果集合中,再删除之前的窗口左侧

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为数组nums的长度

空间复杂度:

O ( n ) O(n) O(n);

Code

/* Monotonic queue implementation */
class MonotonicQueue {LinkedList<Integer> maxq = new LinkedList<>();public void push(int n) {// Delete all elements smaller than nwhile (!maxq.isEmpty() && maxq.getLast() < n) {maxq.pollLast();}// Then add n to the tailmaxq.addLast(n);}public int max() {return maxq.getFirst();}public void pop(int n) {if (n == maxq.getFirst()) {maxq.pollFirst();}}
}class Solution {/**** Sliding Window Maximum** @param nums Given array* @param k Given number* @return int[]*/public int[] maxSlidingWindow(int[] nums, int k) {MonotonicQueue window = new MonotonicQueue();List<Integer> res = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i < k - 1) {// Fill the front k-1 of the window firstwindow.push(nums[i]);} else {// The window slides forward to add a new numberwindow.push(nums[i]);// Record the maximum value of the current windowres.add(window.max());// Remove old numberswindow.pop(nums[i - k + 1]);}}// Needs to be converted to an int[] array and returnedint[] arr = new int[res.size()];for (int i = 0; i < res.size(); i++) {arr[i] = res.get(i);}return arr;}
}

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

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

相关文章

安徽京准、子母钟系统(网络时钟系统)在机场应用方案

安徽京准、子母钟系统&#xff08;网络时钟系统&#xff09;在机场应用方案 安徽京准、子母钟系统&#xff08;网络时钟系统&#xff09;在机场应用方案 摘要&#xff1a;某机场指挥调度、离港系统、航显广播等多个重要信息系统之间的时钟同步&#xff0c;对机场的正常运营和安…

Linux基础 (十):Linux 信号的使用

目录 一、信号的基本概念 二、信号处理常见方式概览 三、修改信号的响应方式 – signal() 3.1 简单复习结束前台进程 3.2 改变SIGINT信号的响应方式 3.3 自定义方式改变进程对信号的响应 3.4 进程对信号作出两种响应 四、发送信号 – kill() 五、利用信号解决僵死进程…

2024电激世界脉动-中国汽车品牌全球化制胜手册

来源&#xff1a;奥美Ogilvy&#xff1a; 近期历史回顾&#xff1a; 2024中国宏观经济专题报告-数据要素市场建设 2023-2024年度报告.pdf 2024制药与生化医疗技术产业链白皮书.pdf 从可再生能源到绿氢-中国投资助力埃及能源转型.pdf 2024有机旅行中国行业指引.pdf 2024中国技术…

我玩过的那些手游的热知识

文章目录 原神&#xff1a;开放世界&#xff0c;3D&#xff0c;二次元&#xff0c;建模精美&#xff0c;打击感强&#xff0c;音乐&#xff0c;二创&#xff0c;双手操作崩坏&#xff1a;星穹铁道&#xff1a;回合制&#xff0c;3D&#xff0c;箱庭地图&#xff0c;二次元&…

运营商系统快速上云的实践分享

运营商系统上云的背景 系统上云是数字经济发展的潮流&#xff0c;在数字化转型的浪潮中&#xff0c;上云已经成为推动各行各业创新和效率提升的关键力量。运营商作为服务行业和企业上云的服务商&#xff0c;积极响应国家号召的同时为行业上云打造案例标杆&#xff0c;自身的系统…

Java如何读取指定地址的tif格式图片转为base64编码

在Java中&#xff0c;要将指定地址的TIFF&#xff08;tif&#xff09;格式图片转换为Base64编码&#xff0c;你需要执行以下步骤&#xff1a; 1、使用java.nio.file包中的Files类或java.io包中的FileInputStream来读取文件。 2、使用java.util.Base64类&#xff08;在Java 8及…

常用目标检测预训练模型大小及准确度比较

目标检测是计算机视觉领域中的一项重要任务&#xff0c;旨在检测和定位图像或者视频中的目标对象。当人类观看图像或视频时&#xff0c;我们可以在瞬间识别和定位感兴趣的对象。目标检测的目标是使用计算机复制这种智能。 近年来&#xff0c;目标检测网络的发展日益成熟&#…

外贸人如何让回复率倍增?面对不回复的潜在客户你可以这样跟进!

当谈到如何开发潜在客户时&#xff0c;采用简洁有效的沟通比什么都重要。 根据DMR的商业统计数据&#xff0c;我们的国外客户平均每天都在发送和接受121封电子邮件&#xff0c;而这个数字会随着个体在组织中获得的更多权利和责任而攀升&#xff0c;自然那些掌握着产品采购大权…

【TypeScript】 ts内置定义的类型

目录 简言内置类型Awaited<Type> 异步结果Partial<Type> 可选Required<Type> 必选Readonly<Type> 只读Record<Keys, Type> 映射对象类型Pick<Type, Keys> 选取新建Omit<Type, Keys> 选取删除Exclude<UnionType, ExcludedMembers&…

四步简单操作:轻松将iCloud照片恢复到相册

随着智能手机的普及&#xff0c;我们的生活中越来越多的照片存储在了云端&#xff0c;其中iCloud提供了便捷的照片备份和存储服务。但有时候&#xff0c;我们可能会不小心删除了在iCloud上的照片&#xff0c;或者想要将iCloud中的照片恢复到手机相册中。 在这篇文章中&#xf…

【数据结构】快速排序(详解)

目录 快速排序 历史&#xff1a; 基本思想&#xff1a; 主框架&#xff1a; 下面解释实现单次排序的几种版本&#xff1a; 1.Hoare版本 2. 挖坑法 3. 前后指针法 快速排序的实现包括递归与非递归&#xff1a; 1. 递归实现&#xff1a;&#xff08;即开头的基本框架&am…

Jenkins安装 :AWS EC2 Linux

1 JDK11 install # 用的yum安装 # 压缩包安装&#xff0c;下载的jdk-11.0.22_linux-x64_bin.tar.gz在EC2解压&#xff0c;配置环境变量&#xff0c;运行jenkins的时候会报错$ yum -y list java-11* Available Packages java-11-amazon-corretto-devel.x86_64 …

Linux shell 实现自增版本号

Linux shell脚本实现x.x.x格式递增版本号&#xff0c;每次运行脚本自动将最后一位版本号1&#xff0c;每次更新后将最新的版本号保存到当前txt文件内容&#xff0c;以保持连续递增版本号。 脚本文件目录 rootubuntu01:/scripts/version# tree . ├── increment_version.sh └…

动手学深度学习4.6 暂退法-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;丢弃法_哔哩哔哩_bilibili 本节教材地址&#xff1a;4.6. 暂退法&#xff08;Dropout&#xff09;…

LangChain技术解密:构建大模型应用的全景指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

Flutter 中的 UnconstrainedBox 小部件:全面指南

Flutter 中的 UnconstrainedBox 小部件&#xff1a;全面指南 Flutter 提供了众多的布局小部件&#xff0c;以帮助开发者构建灵活且响应式的用户界面。UnconstrainedBox 是其中一种特殊的小部件&#xff0c;它允许子组件在没有约束的情况下渲染&#xff0c;同时可以指定一个父组…

深入理解Java中的this关键字

在Java编程中&#xff0c;this关键字是一个非常重要且常用的概念。对于初学者来说&#xff0c;理解this关键字的实际用途和工作原理&#xff0c;对于掌握面向对象编程&#xff08;OOP&#xff09;的基本概念至关重要。本篇博客将详细讲解this关键字的各种用法及其背后的机制&am…

2020职称继续教育--突发公共卫生事件应急处理技术方案

单选题&#xff08;共7题&#xff0c;每题5分&#xff09; 1、滑塌、滑坡、泥石流属于&#xff08;&#xff09;。 C、地质灾害 2、本讲中&#xff0c;不属于卫生应急管理体制原则的是&#xff08;&#xff09;。 B、综合协调 3、自然灾害卫生工作周期不包括&#xff08;&…

使用目标检测模型YOLO V9 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

我看到YOLO V8中&#xff08;ultralytics版本8.2.18&#xff09;集成了YOLO V9&#xff0c;所以直接在YOLO V8 OBB的基础上实现YOLO V9 OBB&#xff0c;训练结果也出来了&#xff0c;但是评估指标比YOLO V8 OBB低一点点&#xff0c;不知道是不是哪里遗漏修改了......如有大神赐…

公用表表达式(CTE)详解:针对 MySQL 和 SQL Server 数据库

公用表表达式&#xff08;CTE&#xff0c;Common Table Expressions&#xff09;是一种在 SQL 中定义临时结果集的方法&#xff0c;该结果集在单个查询的执行过程中可以被引用。CTE 提高了查询的可读性和结构化&#xff0c;特别适用于复杂的子查询和递归查询。本文将详细介绍 C…