239. 滑动窗口最大值(leetcoude-hot100)-另附一道同类扩展题

239. 滑动窗口最大值

解题思路

本题的主要思想是通过单调队列去存储数组的下标,对于这道题目来讲,是通过一个数组b来维护一个单调递减的队列,用hh和tt来记录数组b所模拟的队列的头部和尾部,而b[i]记录的是数组nums的对应元素的下标,这样我们便可以通过b[hh]来判断该队列的最大值是否还在滑动窗口里

初始化

vector<int>ans;//答案
int b[100010];//数组b记录下标位置
int hh = 0, tt = - 1;//维护一个单调队列,hh为头部,tt为尾部

判断该队列的最大值是否还在滑动窗口里

while(hh <= tt && b[hh] < i - k + 1) hh++;

寻找该元素的应该替代的元素的位置

while(hh <= tt && nums[b[tt]] < nums[i]) tt--;
b[++tt] = i;

当下标i>=k-1的时候就代表第一个滑动窗口形成了

 if(i >= k - 1)ans.push_back(nums[b[hh]]); //滑动步长为1,所以只要大于等于k-1就每次存储

AC代码

class Solution {
public:vector<int>ans;//答案int b[100010];//数组b记录下标位置int hh = 0, tt = - 1;//维护一个单调队列,hh为头部,tt为尾部vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n = nums.size();for(int i = 0; i < n; i++){while(hh <= tt && b[hh] < i - k + 1) hh++;while(hh <= tt && nums[b[tt]] < nums[i]) tt--;b[++tt] = i;if(i >= k - 1){ans.push_back(nums[b[hh]]);}}return ans;}
};

不仅求最大,还让求最小,且数据范围变大

滑动窗口 /【模板】单调队列

题目描述

有一个长为 n n n 的序列 a a a,以及一个大小为 k k k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。

例如,对于序列 [ 1 , 3 , − 1 , − 3 , 5 , 3 , 6 , 7 ] [1,3,-1,-3,5,3,6,7] [1,3,1,3,5,3,6,7] 以及 k = 3 k = 3 k=3,有如下过程:

窗口位置 最小值 最大值 [1   3  -1] -3   5   3   6   7  − 1 3 1  [3  -1  -3]  5   3   6   7  − 3 3 1   3 [-1  -3   5]  3   6   7  − 3 5 1   3  -1 [-3   5   3]  6   7  − 3 5 1   3  -1  -3  [5   3   6]  7  3 6 1   3  -1  -3   5  [3   6   7] 3 7 \def\arraystretch{1.2} \begin{array}{|c|c|c|}\hline \textsf{窗口位置} & \textsf{最小值} & \textsf{最大值} \\ \hline \verb![1 3 -1] -3 5 3 6 7 ! & -1 & 3 \\ \hline \verb! 1 [3 -1 -3] 5 3 6 7 ! & -3 & 3 \\ \hline \verb! 1 3 [-1 -3 5] 3 6 7 ! & -3 & 5 \\ \hline \verb! 1 3 -1 [-3 5 3] 6 7 ! & -3 & 5 \\ \hline \verb! 1 3 -1 -3 [5 3 6] 7 ! & 3 & 6 \\ \hline \verb! 1 3 -1 -3 5 [3 6 7]! & 3 & 7 \\ \hline \end{array} 窗口位置[1   3  -1] -3   5   3   6   7  1  [3  -1  -3]  5   3   6   7  1   3 [-1  -3   5]  3   6   7  1   3  -1 [-3   5   3]  6   7  1   3  -1  -3  [5   3   6]  7  1   3  -1  -3   5  [3   6   7]最小值133333最大值335567

输入格式

输入一共有两行,第一行有两个正整数 n , k n,k n,k
第二行 n n n 个整数,表示序列 a a a

输出格式

输出共两行,第一行为每次窗口滑动的最小值
第二行为每次窗口滑动的最大值

样例 #1

样例输入 #1

8 3
1 3 -1 -3 5 3 6 7

样例输出 #1

-1 -3 -3 -3 3 3
3 3 5 5 6 7

提示

【数据范围】
对于 50 % 50\% 50% 的数据, 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105
对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ n ≤ 1 0 6 1\le k \le n \le 10^6 1kn106 a i ∈ [ − 2 31 , 2 31 ) a_i \in [-2^{31},2^{31}) ai[231,231)

AC代码

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<stack>
#define rep(i,a,n) for(int i = a; i <= n; i++) 
#define per(i,a,n) for(int i = n; i >= a; i--)using namespace std;typedef long long ll;const int N = 1000010;
int b[N];
int nums[N];
int hh = 0, tt = -1;
int main(){//   freopen("input.txt", "r", stdin);int n,k;cin >> n >> k;rep(i,0,n - 1) cin >> nums[i];int flag = 0;rep(i,0,n - 1){while(hh <= tt && b[hh] < i - k + 1) hh++;while(hh <= tt && nums[b[tt]] > nums[i])tt--;b[++tt] = i;if(i >= k - 1){if(flag) cout<<" ";cout << nums[b[hh]];flag = 1;}}puts("");hh = 0, tt = -1, flag = 0;rep(i,0,n - 1){while(hh <= tt && b[hh] < i - k + 1) hh++;while(hh <= tt && nums[b[tt]] < nums[i])tt--;b[++tt] = i;if(i >= k - 1){if(flag) cout<<" ";cout << nums[b[hh]];flag = 1;}}return 0;}

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

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

相关文章

793.高精度乘法(acwing)

文章目录 793.高精度乘法题目描述高精度乘法 793.高精度乘法 题目描述 给定两个正整数A和B&#xff0c;请你计算A * B的值。 输入格式 共两行&#xff0c;第一行包含整数A&#xff0c;第二行包含整数B。 输出格式 共一行&#xff0c;包含A * B的值。 数据范围 1≤A的长度≤…

BigDecimal可以用equals方法做等值比较吗?

结论是不可以&#xff0c;BigDecimal的equals方法不仅会比较值&#xff0c;还会比较精度&#xff0c;比如1.0和1.00虽然值是一样的&#xff0c;我们也倾向于认为是相同的&#xff0c;但是因为精度不同&#xff0c;最终得到的结论是false。 代码如下&#xff1a; Test public v…

Ansible Inventory主机清单和playbook 剧本

Ansible Inventory主机清单playbook 剧本一、inventory主机清单管理1、主机与组2、变量2.1 主机变量2.2 组变量2.3 组嵌套2.4 别名 3、inventory 中的变量 二、Ansible 的脚本 --- playbook 剧本1、playbook的组成2、如何定义playbook &#xff1f;2.1 基本格式2.2 语句的横向/…

云计算科学与工程实践指南--章节引言收集

云计算科学与工程实践指南–章节引言收集 //本文收集 【云计算科学与工程实践指南】 书中每一章节的引言。 我已厌倦了在一本书中阅读云的定义。难道你不失望吗&#xff1f;你正在阅读一个很好的故事&#xff0c;突然间作者必须停下来介绍云。谁在乎云是什么&#xff1f; 通…

使用 Mendix 中的 OIDC 模块集成 Azure AD SSO

前言 在当今快速发展的数字化世界中&#xff0c;企业追求高效率和灵活性已成为常态。Mendix&#xff0c;作为一个先进的低代码开发平台&#xff0c;正是企业快速响应市场需求、加速数字化转型过程的利器。通过其直观的可视化开发环境&#xff0c;即使是非技术背景的用户也能设…

SpringBoot-WEB相关

WEB相关 WebApplicationContextServletContextAwareProcessor用于处理带有WebApplicationContextServletContextAware接口的Bean&#xff0c;该接口的目的是&#xff1a;用于指示 Spring 中的 Bean 希望获取 ServletContext 对象。这个接口不包含任何方法&#xff0c;它仅仅是…

技术小知识:云计算服务下的IaaS,PaaS,SaaS⑥

一、云计算 云计算起源仿照天空的云朵聚集&#xff0c;意为对大量服务器的远程管理。以便能对服务器做空间、资源的最大动态协调利用和降低操作执行命令的复杂度。 二、云计算衍生下的服务 在服务器以一种云的形式存在&#xff0c;衍生除了很多服务提供&#xff0c;以便用户可以…

七、MySQL配置文件及常用参数

目录 一、配置文件 二、MySQL参数 一、配置文件 配置文件目录&#xff1a;/etc 注意&#xff1a;首行缩进的均为示例&#xff0c;主要参数不能作为生产环境依据&#xff0c;建议在DBA指导下配置。更新中 [rootrabbitmq_1 etc]# vim my.cnf //因为mysql在启动时候&#xff0…

295.【华为OD机试】智能驾驶( 广度优先搜索(BFS)JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

crossover2023激活码分享crossover免费升级2024 crossover24更新内容

CrossOver是一款功能强大的系统兼容软件&#xff0c;它能够让Mac和Linux用户在不安装Windows操作系统的情况下直接运行Windows应用程序。以下是关于CrossOver的更多信息&#xff1a; 一、工作原理 CrossOver的工作原理是通过在Mac或Linux系统上模拟Windows应用程序所需的运行…

循序渐进丨MogDB 数据库新特性之SQL PATCH绑定执行计划

1 SQL PATCH 熟悉 Oracle 的DBA都知道&#xff0c;生产系统出现性能问题时&#xff0c;往往是SQL走错了执行计划&#xff0c;紧急情况下&#xff0c;无法及时修改应用代码&#xff0c;DBA可以采用多种方式针对于某类SQL进行执行计划绑定&#xff0c;比如SQL Profile、SPM、SQL …

Python基础三

一、模块&#xff08;model&#xff09; 1、定义 以.py 结尾的文件&#xff0c;包含了Python对象定义和Python语句 如下&#xff1a;包含了两个模块&#xff0c;分别为 main.py 和 model.py 2、特点 模块让你能够有逻辑地组织你的Python 代码段。把相关的代码分配到一个模块…

封装数据请求方法与接口方法

src\libs\http.js 封装 get、post 请求 import axios from axios import qs from qsimport { JUHE_APPKEY } from /configs/keysfunction axiosPost(options) {axios({url: options.url,method: post,header: {Content-Type: application/x-www-form-urlencoded,},data: qs.st…

协程简单介绍

协程&#xff08;Coroutine&#xff09;是一种用户态的轻量级线程&#xff0c;它可以在单线程内实现多个执行线程的切换和调度&#xff0c;而无需依赖操作系统的线程管理机制&#xff08;简单来说可以认为协程是线程里不同的函数&#xff0c;这些函数之间可以相互快速切换&…

Linux: 预备

计算机结构基础 操作系统: 内核 (管理软硬件) shell(给用户使用操作系统的方式) 操作系统的目标 对硬件抽象 原因:操作系统是对软硬件资源管理的应用软件抽象:内存管理, 进程管理, 文件管理, 驱动管理软件:驱动程序(给软件提供访问硬件的软件)硬件:磁盘(对应文件), 网卡等隔离…

基于SpringBoot的医疗资源共享平台设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 MyBatis框架 3 1.3 WebSocket技术 4 1.4 Selenium技术 5 1.5 EL-ADMIN技术 5 1.6 Ajax技术 5 1.7 本章小结 6 2 系统分析 7 2.1 功能需求分析 7 2.2 非功能需求 9 2.3 本章小结 10 3 系统设计 11 3.…

解锁安卓开发利器:深度探析ADB【安卓开发】

引言 在安卓开发与维护过程中&#xff0c;我们经常会遇到一些限制&#xff0c;比如无法直接访问某些系统功能&#xff0c;或者在某些定制系统中 受到限制 。为了解决这些问题&#xff0c;我们需要一种有效的工具来管理和调试安卓设备&#xff0c;而这时候ADB&#xff08;Andro…

poetry库:依赖管理和打包工具

这个工具是在群里看见别人说好用的&#xff0c;所以了解一下。 1.poetry初始 官网&#xff1a;https://python-poetry.org/ 项目仓库&#xff1a;https://github.com/python-poetry 或 https://github.com/python-poetry/poetry 教程&#xff1a;https://python-poetry.org/…

二、NLP中的序列标注(分词、主体识别)

一般来说&#xff0c;一个序列指的是一个句子&#xff0c;而一个元素指的是句子中的一个词。在序列标注中&#xff0c;我们想对一个序列的每一个元素标注一个分类标签。比如信息提取问题可以认为是一个序列标注问题&#xff0c;如提取出会议时间、地点等。 常见的应用场景&…

css学习心得

css 通过内嵌样式表来选择文本字体的大小和颜色 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>p{font-size:16px;color: blue;}</style></head><body><!-- px 像素…