【程序设计思维与实践 Week5 作业D】滑动窗口

2023-05-16

题目描述:

有一个长度为 n 的数列和一个大小为 k 的窗口, 窗口可以在数列上来回移动. 现在 我们想知道在窗口从左往右滑的时候,每次窗口内数的最大值和最小值分别是多少.
例如:数列是[1 3 -1 -3 5 3 6 7], 其中 k 等于 3。
在这里插入图片描述

输入说明:

输入有两行。第一行两个整数n和k分别表示数列的长度和滑动窗口的大小,1<=k<=n<=1000000。第二行有n个整数表示数列。

Sample Input:

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

输出说明:

输出有两行。第一行输出滑动窗口在从左到右的每个位置时,滑动窗口中的最小值。第二行是最大值。

Sample Output:

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

思路:

这是是要求取大小为K的滑动窗口内的最值,是一个局部的概念,我们仍然可采用与作业A当中单调栈类似的思想,单调栈可求取全局范围内的最值,因为这里是一个局部的概念,因此,对于不属于当前范围的元素应去除,故队首元素会因窗口向右滑动而可能被去除,这是一个单调队列的思想。
建立一个单调递增的队列,依次压入各个数字,若要压入的数不满足队列的单调性,则将队尾元素移除,直到要压入的元素满足单调性,压入之后,应对队首元素进行考察,是否属于当前范围(因为每次只压入一个元素所以只考虑队首一位即可),若不属于当前范围,则将其移除,此时队首元素即为以压入元素为右边界的滑动窗口内的最小元素,直到压入最后一个数,此时便求出了所有窗口的最小值。
同理建立一个单调递减队列,即可求出每个窗口位置的最大值。

代码:

#include <iostream>
using namespace std;
const int size=1e6+10;
int st[size],val[size];
int Min[size],Max[size];
int l=1,r=0,n,k;
int main(int argc, char** argv) {
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
		scanf("%d",val+i);
	for(int i=1;i<=n;i++)
	{
		while(l<=r&&val[st[r]]>val[i]) r--;
		st[++r]=i;
		if(l<=r&&st[r]-st[l]+1>k) l++;
		Min[i]=val[st[l]];
	} 
	l=1;r=0;
	for(int i=1;i<=n;i++)
	{
		while(l<=r&&val[st[r]]<val[i]) r--;
		st[++r]=i;
		if(l<=r&&st[r]-st[l]+1>k) l++;
		Max[i]=val[st[l]];
	} 
	for(int i=k;i<=n;i++)
		printf("%d ",Min[i]);
	printf("\n");
	for(int i=k;i<=n;i++)
		printf("%d ",Max[i]);
	printf("\n");
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【程序设计思维与实践 Week5 作业D】滑动窗口 的相关文章

  • 矩阵在pycharm中全显示(不自动换行)

    加上下面这句代码 xff0c 输出时打印不换行 import numpy as np np set printoptions linewidth 61 400 强制输出小数方法 xff1a suppress 61 True 强制类型转换 d
  • python的print输出txt

    方法一 xff1a import sys newfile 61 39 C VisualSTUDIO climbdouban soup txt 39 data 61 open newfile 39 w 39 encoding 61 34 ut
  • linux返回上级目录

    cd 返回上一级目录 cd 返回上两级目录 cd或cd 返回home目录 cd 目录名 返回指定目录
  • Debian7虚拟机安装

    一 虚拟机的创建 Debian7 下载地址 1 创建新的虚拟机 主页点击创建新的虚拟机 xff0c 打开虚拟机向导 xff0c 选择自定义 2 选择虚拟机硬件兼容性 默认就行 xff0c 点击下一步 3 安装客户机操作系统 这里选择稍后安装
  • windows环境UDP发送free-d协议数据,全网独家!

    话不多说上代码 xff1a span class token macro property span class token directive keyword include span span class token string lt
  • python之zmail的邮件发送

    自动化测试 python基础之邮件发送 文章目录 自动化测试 python基础之邮件发送一 使用步骤二 使用步骤邮件发送使用介绍发送邮件功能的封装授权码获取 总结 一 使用步骤 这里使用的是python 43 zmail进行邮件的发送 wi
  • opencv中自适应阈值(adaptiveThreshold()函数)介绍

    1 自适应阈值简介 自适应阈值 xff08 adaptiveThreshold xff0c 用于二值化处理图像 xff0c 对于对比大的图像有较好效果 xff0c 相对于opencv中固定阈值化操作 xff08 threshold xff0
  • ubuntu安装nvidia显卡驱动后黑屏,进不去Ubuntu系统

    我在Ubuntu16 04上安装cuda时选择了电脑建议安装的430显卡驱动 xff0c 然后重启电脑后黑屏 xff0c 进不去字符界面 xff0c 就像键盘和主机断开联系了 xff0c 网上试了很多方法都没用 xff0c 最后是在Ubun
  • win10修改wsl2配置以降低vmmem进程内存占用过高问题

    文章目录 wsl常用命令修改 wslconfig配置文件 wslconfig文件路径 wslconfig文件内容 检查配置生效与否 查看任务管理器时发现vmmem进程占用内存过高 查阅相关文档后 xff0c 可以通过对wsl的一些默认配置做
  • Week15实验

    A题 xff1a Q 老师有 N 个学生 xff0c 每个学生都有各自独立的编号 xff0c 且编号范围在 1 N 之间 这一天 xff0c 所有学生都在不同的时间进入教室 Q 老师记录了当编号为 i 的学生进入教室时 xff0c 教室中共
  • 树莓派学习笔记四:树莓派安装VSCode

    首先 xff0c 在Windows浏览器中打开链接 xff1a https code visualstudio com Download xff0c 选择适合树莓派系统的软件版本 xff0c 注意树莓派为32位的系统 xff0c 应当选择下
  • 编译opencv错误

    编译opencv错误 1 CMake Warning at cmake OpenCVDownload cmake 202 message FFMPEG Download failed 7 Couldn t connect to server
  • 有两个线程,一个模拟数鸭子(循环输出200个数),一个模拟下雨(循环输出100个数), 在数到第50只鸭子的时候,开始下雨,下雨的时候 不能数鸭子,雨下完,再接着数鸭子

    题目有两个线程 一个模拟数鸭子 循环输出200个数 一个模拟下雨 循环输出100个数 在数到第50只鸭子的时候 开始下雨 下雨的时候不能数鸭子 雨下完 再接着数鸭子 遇到问题 用join可以 但是用 CountDownLatch latch
  • go调用python3:go-python3包的使用

    参考资料 xff1a https zhuanlan zhihu com p 150253406 https blog csdn net skyztttt article details 8115086 https poweruser blo
  • week8 C - 班长竞选(强联通分量,缩点)

    一 题目描述 大学班级选班长 xff0c N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 xff0c 意见具有传递性 xff0c 即 A 认为 B 合适 xff0c B 认为 C 合适 xff0c 则 A 也认为 C
  • QT等待动态图gif加载透明背景lable

    h QLabel span class token operator span waiting span class token punctuation span QMovie span class token operator span
  • Week12 作业 B - 必做题(三维空间迷宫)

    一 题目描述 zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动 空间的四周封闭 zjm的目标是走到空间的出口 是否存在
  • Week13 作业 A - TT 的神秘任务1(必做)

    一 题目描述 这一天 xff0c TT 遇到了一个神秘人 神秘人给了两个数字 xff0c 分别表示 n 和 k xff0c 并要求 TT 给出 k 个奇偶性相同的正整数 xff0c 使得其和等于 n 例如 n 61 10 xff0c k 6
  • CentOS 7:使用技巧

    写在前面 主要是记录一下CentOS 7的一些使用技巧 一 添加拼音输入法 默认的输入法只有英文的输入 xff0c 需要自行添加中文的输入法 点击左上角的Applications xff0c 选择System Tools中的Settings
  • ubuntu安装php7.3

    php7 3的安装 按顺序输入命令 sudo apt get install software properties common python software propertiessudo add apt repository ppa

随机推荐

  • 多数据库数据列表分页

    多数据库查询数据列表分页 概述 xff1a 在后台管理系统中 列表数据的展示有可能来自多个数据源 xff0c 列表页需要支持分页 这边有两种方案 多个数据源的数据定时同步到某一个数据源A中 xff0c 列表显示的数据就从数据源A中进行分页查
  • ubuntu安装postman

    ubuntu安装postman postman官网下载压缩包点击此处 下载完成之后 把压缩包到桌面路径上 解压文件之后 通过命令 xff1a span class token punctuation span span class toke
  • mac docker + nginx + php

    链接地址 https www phpbloger com article 505 html
  • docker nginx 多个php版本

    链接 https cloud tencent com developer article 1554052
  • docke+nginx+php

    docker run name nginx p 8001 8001 p 8002 8002 v docker nginx www www v docker nginx conf nginx conf etc nginx conf d v d
  • 一个基于layui的简单组件,基于jquery的简单组件,layMin有简洁的提示框和图片预览、及加载效果等

    layMin扩展组件 一个基于layui的简单组件 xff0c 基于jquery的简单组件 xff0c layMin有简洁的提示框和图片预览 及加载效果等 xff1b 支持作为layui的组件引入 xff0c 也支持单独引入layMin c
  • Linux嵌入式终端的脚本,检测有没插网线

    span class token shebang important bin sh span span class token assign left variable NETWORK span span class token opera
  • Ubuntu20.04系统下进行复制粘贴文件显示没有权限的解决办法

    Ctrl 43 alt 43 T打开终端输入命令sudo nautilus然后就可以打开一个不需要管理员权限的界面 xff0c 可以直接复制粘贴 亲测有效 xff01 xff01 借鉴于博客 xff1a https blog csdn ne
  • Ubuntu20.04安装anaconda3成功以后,找不到conda命令

    原因 xff1a 环境设置没有更新 解决办法 xff1a 注意路径 xff01 找到anaconda安装完成后生成的文件夹位置 相应修改 xff0c 如下图我的位置就在主目录下 xff1a 因此 xff0c 我执行的命令为 xff1a ec
  • ubuntu16.04 opencv打开摄像头失败

    ubuntu16 04 opencv打开摄像头失败 按照opencv检测AruCo标记教程 xff0c 运行程序时打开摄像头失败 xff0c 使用的相机是Intel RealSense D435 发生问题的代码如下 span class t
  • 计算机视觉学习笔记&思维导图(一起轻松学习计算机视觉与图像处理)

    文章目录 前言一 思维导图二 笔记勘误 前言 本文为计算机视觉课程期末复习的笔记 xff0c 编者耗时近半个月整理而成 内容依据课程的学习资料以及查阅网上一些资料梳理得到的 xff0c 编者希望在应付考试的同时能够将计算机视觉的知识体系建立
  • python发送邮件

    text 61 39 亲爱的Jerry 我是你的邻居Tom xff01 5 1邀请你来参加劳动 xff01 CALL ME xff1a 123 64 qq com 39 from email mime text import MIMETex
  • Python实现微信自动化发送信息

    需求 xff1a 利用PC端微信实现自动向文件传输助手 xff0c 好友等发送信息 库说明 psutil 获取系统运行的进程和系统利用率 xff08 包括CPU 内存 磁盘 网络等 xff09 信息 xff0c 用于获取进程ID pywin
  • 数据类型——枚举

    文章目录 枚举是什么枚举的声明枚举与其他数据类型的转换与int类型转换枚举转intint转枚举 与string类型转换枚举转字符串字符串转枚举 枚举的意义是什么 枚举是什么 在c 中 xff0c 枚举 enumeration 是一种数据类型
  • C# 调用WebService的方式汇总

    C 调用WebService的方式汇总 方式一 xff1a 根据提供的webservice地址 xff0c 用VS自带工具生成cs文件 xff0c 添加到项目中使用即可 方式二 xff1a 根据webservice地址 xff0c 动态在项
  • npm 报错:`[HPM] Error occurred while trying to proxy request (ECONNREFUSED)`

    npm 报错 xff1a HPM Error occurred while trying to proxy request users from localhost 8000 to https localhost 5000 ECONNREF
  • selenium Grid 4.x版本 部署操作 笔记

    selenium Grid 4 x版本 部署操作 笔记 selenium Grid 是 selenium套件 的一部分 xff0c 实现分布式测试 xff0c 多用于浏览器兼容性测试 使用 hub nodes 理念 xff1a 一台 hub
  • 图解辗转相除法

    前言 虽然在很久很久以前刚入门ACM的时候就已经知道辗转相除法的存在 xff0c 并且也用GCD解了不少题 xff0c 不过说实话辗转相除法的原理一直不是很清楚 直到最近做到这样一道题 Codeforces 343A xff0c 本以为是一
  • 【程序设计思维与实践 Week2 实验C】瑞神打牌

    题意 xff1a 牌局由四个人构成 xff0c 围成一圈 我们称四个方向为北 东 南 西 对应的英文是North xff0c East xff0c South xff0c West 游戏一共由一副扑克 xff0c 也就是52张构成 开始 x
  • 【程序设计思维与实践 Week5 作业D】滑动窗口

    题目描述 xff1a 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 我们想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3