【栈与队列】滑动窗口最大值

题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 

分析:首先我们可以发现滑动窗口的移动操作和队列的一进一出很相似,pop队头元素,push进队尾一个元素。所以我们可以使用队列来实现此题所需要的功能。但是题目要求返回滑动窗口的最大值,我们应该怎么做呢?大家一般第一想法就是对元素进行排序,但是排序之后我们还需要移动滑动窗口,即需要pop队头,那我们就无法pop正常需要pop的元素,每次pop的都是最大值,因此不能使用排序或者优先级队列。我们可以自己设计需要的队列让它能够找到最大值并且可以正确进行移动。

如何找到最大值,需要我们在push函数上进行设计。我们把最大值始终放在队头,把比它小的元素都pop掉。注意这里需要从back比较,并从back 进行pop,否则逻辑错误。

在pop函数设计时,由于我们有可能在push函数调用时已经pop了一些较小的元素,所以我们需要判断要pop的元素是否和队头元素相等,若相等则pop,否则说明在在push函数调用时就已经pop了,那么就不需要执行任何操作。

具体代码:

class Solution {
private:class Myqueue {public:deque<int> que;void pop(int value) {if(!que.empty() && value == que.front()) {que.pop_front();}}void push(int value) {while(!que.empty() && value > que.back()) {que.pop_back();}que.push_back(value);}int front() {return que.front();}};
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {Myqueue que;vector<int> result;for(int i = 0; i < k; i++) {que.push(nums[i]);}result.push_back(que.front());for(int i = k; i < nums.size(); i++) {que.pop(nums[i - k]);que.push(nums[i]);result.push_back(que.front());}return result;}
};

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

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

相关文章

揭秘教学新利器:SmartEDA电路仿真软件,让电子学习更生动!

在数字化教育浪潮中&#xff0c;一款名为SmartEDA的电路仿真软件逐渐崭露头角&#xff0c;以其直观、易操作的特点&#xff0c;为电子学习领域带来了革命性的变化。今天&#xff0c;就让我们一起探讨如何使用SmartEDA进行教学&#xff0c;让电子学习变得更加生动有趣&#xff0…

使用Python实现深度学习模型:强化学习与深度Q网络(DQN)

深度Q网络(Deep Q-Network,DQN)是结合深度学习与强化学习的一种方法,用于解决复杂的决策问题。本文将详细介绍如何使用Python实现DQN,主要包括以下几个方面: 强化学习简介DQN算法简介环境搭建DQN模型实现模型训练与评估1. 强化学习简介 强化学习是一种训练智能体(agent…

Android源码——Handler机制(一)

Android源码——Handler机制&#xff08;一&#xff09; Handler机制概述介绍Handler机制模型Handler机制架构 Handler机制源码解析ActivityThreadLooperHandler Handler机制概述 介绍 Handler是Android消息机制的上层接口。Handler可以将一个任务切换到Handler所在的线程中去…

赶紧收藏!2024 年最常见的操作系统面试题(八)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见的操作系统面试题&#xff08;七&#xff09;-CSDN博客 十五、什么是进程同步&#xff1f;请举例说明几种进程同步的方法。 进程同步是操作系统中用于控制多个进程或线程对共享资源的访问的一种机制。它确保在任何给…

网络物理隔离后 可以用保密U盘进行数据安全交换吗?

企业用的保密U盘通常被设计用于存储和传输敏感信息&#xff0c;以确保数据的安全和保密性。 在网络之间实现了物理隔离后&#xff0c;使用保密U盘进行数据安全交换是一种常见的做法。物理隔离确保了两个网络之间的完全分离&#xff0c;因此使用保密U盘可以作为一种安全的手段来…

android view 设置过 transalationY/X 后 marginTop/marginStart/Left 不变

在 Android 开发中&#xff0c;当你对一个视图(View)设置了 translationY 属性后&#xff0c;这个视图的 marginTop 属性实际上并不会改变。这是因为 translationY 只会影响视图的绘制位置&#xff0c;而不会改变视图的布局参数。换句话说&#xff0c;translationY 是一个运行时…

第1章 物联网模式简介---物联网概述

物联网模式简介 物联网&#xff08;IoT&#xff09;在最近几年获得了巨大的吸引力&#xff0c;该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业&#xff0c;包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

UNIAPP_在js文件中使用i18n国际化

导入 import { initVueI18n } from dcloudio/uni-i18n import messages from /locale/index const { t } initVueI18n(messages) 使用 t(config.request.i001).

【大模型】大模型微调方法总结(四)

1. P-Tuning v1 1.背景 大模型的Prompt构造方式严重影响下游任务的效果。比如&#xff1a;GPT-3采用人工构造的模版来做上下文学习&#xff08;in context learning&#xff09;&#xff0c;但人工设计的模版的变化特别敏感&#xff0c;加一个词或者少一个词&#xff0c;或者变…

MySQL存储引擎 INNODB和MYISAM

存储引擎概述 什么是存储引擎 是数据库底层软件组件&#xff0c;数据库管理系统使用数据索引进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧】锁定水平等功能&#xff0c;使用不同的存储引擎可以获得特定的功能 MySQL5.7支持的存储引擎 …

大数据面试之Hadoop

目录 介绍下Hadoop Hadoop的特点 说下Hadoop生态圈组件及其作用 Hadoop主要分哪几个部分?他们有什么作用? Hadoop 1.x&#xff0c;2x&#xff0c;3.x的区别 Hadoop集群工作时启动哪些进程?它们有什么作用? 在集群计算的时候&#xff0c;什么是集群的主要瓶颈 搭建Ha…

用英文介绍美国总统Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

网页中如何接入高德地图【静态地图篇】

接入高德地图 登录高德开放平台创建应用添加key创建静态地图文档说明markers 网页应用总结 登录高德开放平台 高德开放平台 创建应用 点击我的应用 -> 创建应用 添加key 调相关接口都需要用到这个key&#xff01; 创建静态地图 静态地图API文档 文档说明 服务地址…

基于上一篇博客,用阻塞队列实现异步下单

在上一篇博客中&#xff0c;我们介绍了如何利用 Redis 和 Lua 脚本来高效处理秒杀活动中的高并发请求&#xff0c;保证用户体验。本文将进一步优化秒杀系统&#xff0c;通过引入阻塞队列实现异步下单&#xff0c;从而提高系统的整体性能和稳定性。 引言 秒杀活动往往伴随着极…

ArmSoM-Sige7/5/1 和树莓派5规格比较

引言 在当今快速发展的嵌入式系统领域&#xff0c;选择一款性能强大、功能丰富的开发板对于项目的成功至关重要。本文将介绍并比较 Sige7、Sige5、Raspberry Pi 5 和 Sige1 这四款开发板的关键规格和特性&#xff0c;帮助开发者和爱好者选择最适合其需求的平台。 ArmSoM-Sige…

使用模板方法设计模式封装 socket 套接字并实现Tcp服务器和客户端 简单工厂模式设计

文章目录 使用模板方法设计模式封装套接字使用封装后的套接字实现Tcp服务器和客户端实现Tcp服务器实现Tcp客户端 工厂模式 使用模板方法设计模式封装套接字 可以使用模块方法设计模式来设计套接字 socket 的封装 模板方法&#xff08;Template Method&#xff09;设计模式是一…

【深度学习】深度学习基础

李宏毅深度学习笔记 局部极小值与鞍点 鞍点其实就是梯度是零且区别于局部极小值和局部极大值的点。 鞍点的叫法是因为其形状像马鞍。鞍点的梯度为零&#xff0c;但它不是局部极小值。我们把梯度为零的点统称为临界点&#xff08;critical point&#xff09;。损失没有办法再下…

使用Flink CDC实现 Oracle数据库数据同步(非SQL)

文章目录 前言一、开启归档日志二、创建flinkcdc专属用户2.1 对于Oracle 非CDB数据库&#xff0c;执行如下sql2.2 对于Oracle CDB数据库&#xff0c;执行如下sql 三、指定oracle表、库级启用四、使用flink-connector-oracle-cdc实现数据库同步4.1 引入pom依赖4.1 Java主代码4.1…

Docker Desktop 简易操作指南 (Windows, macOS, Linux)

1. 下载最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.启动 Docker Desktop 3.常用命令&#xff08;在 cmd 或 Terminal 中执行&#xff09; #列出所有镜像&#xff08;Images&#xff09; docker images #列出所有容器&#xff08;Containers&…

OpenSSL/3.3.0: error:0A00018A:SSL routines::dh key too small

php curl解决办法: curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ‘DEFAULTSECLEVEL1’); python 解决办法: from twisted.internet.ssl import AcceptableCiphers from scrapy.core.downloader import contextfactory contextfactory.DEFAULT_CIPHERS AcceptableCiphers.from…