滑动窗口--单调队列

给定一个大小为 n≤106 的数组。

有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。

你只能在窗口中看到 k 个数字。

每次滑动窗口向右移动一个位置。

以下是一个例子:

该数组为 [1 3 -1 -3 5 3 6 7],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
你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。

输入格式
输入包含两行。

第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。

第二行有 n 个整数,代表数组的具体数值。

同行数据之间用空格隔开。

输出格式
输出包含两个。

第一行输出,从左至右,每个位置滑动窗口中的最小值。

第二行输出,从左至右,每个位置滑动窗口中的最大值。

输入样例:
8 3
1 3 -1 -3 5 3 6 7
输出样例:
-1 -3 -3 -3 3 3
3 3 5 5 6 7

import java.io.BufferedReader;
import java.io.InputStreamReader;/*** Created with IntelliJ IDEA.** @Auther: zlf* @Date: 2021/04/04/22:54* @Description: 滑动窗口的最大值和最小值 使用单调队列解决*/
public class 滑动窗口 {public static void main(String[] args) throws Exception {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String[] s = reader.readLine().split(" ");int n = Integer.valueOf(s[0]);int k = Integer.valueOf(s[1]);String[] chs = reader.readLine().split(" ");int nums[] = new int[n];for (int i = 0; i < n; i++) {nums[i] = Integer.valueOf(chs[i]);}int queue[] = new int[n];int hh = 0 ,tt = -1 ; // hh 队头,tt 队尾// 找到滑动窗口最小值for (int i = 0; i < n; i++) {// 保证队头在窗口内if(hh <= tt && i-k+1 > queue[hh]) hh++;// 如果新加入的元素比队尾小的话,说明该队尾不需要了while(hh <= tt && nums[i] <= nums[queue[tt]] ) tt--;queue[++tt] = i;if(i >= k-1) System.out.print(nums[queue[hh]]+" ");}System.out.println();hh = 0;tt = -1;// 找到滑动窗口最大值for (int i = 0; i < n; i++) {// 保证队头在窗口内if(hh <= tt && i-k+1 > queue[hh]) hh++;// 如果新加入的元素比队尾大的话,说明该队尾不需要了while(hh <= tt && nums[i] >= nums[queue[tt]] ) tt--;queue[++tt] = i;if(i >= k-1) System.out.print(nums[queue[hh]]+" ");}System.out.println();}
}

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

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

相关文章

CentOS7 源码编译安装MySQL8.0.15 shell脚本

使用MySQL8无需像MySQL5那样需要Boost依赖&#xff0c;和经过35-55分钟的等待编译完成&#xff0c;直接解压即可使用&#xff0c;方便快捷&#xff01; 1&#xff0c;环境&#xff1a; 操作系统 CentOS Linux release 7.6.1810 (Core) 64位 服务器环境 “腾讯云”服务器…

切割图形_泉州泡沫景观字切割机厂家

泉州泡沫景观字切割机厂家 jz4rw0qv泉州泡沫景观字切割机厂家 巨源线条切割机同步带型结构合理、性能、精密度高、、操作简便、价格合理&#xff0c;比同行业同款机床更高&#xff0c;是原有同步带型泡沫切割机的替代产品。自动编程使用计算机利用配合切割机应用&#xff0c;只…

你的搜索其实很糟糕?

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2013-3-27 来源&#xff1a;GBin1.com 尽管你非常擅长搜索&#xff0c;但是很多时候搜索内容和你想要的并不吻合。事实上&#xff0c;用户体验专家Jakob Nielsen认为大多数人都非常的不擅长搜索。…

Element Tree型控件

效果 前端 <template><div class"app-container"><el-inputplaceholder"输入关键字进行过滤"、<! -- 双向绑定-- >v-model"filterText"></el-input><el-tree ref"tree":data"subjectList"…

快速根据注释生成接口文档网页工具——Apidoc的使用教程

环境&#xff1a; 操作系统 CentOS Linux release 7.6.1810 (Core) 64位 服务器环境 “腾讯云”服务器 1&#xff0c;安装Node.js的npm工具环境&#xff1a; 如有不懂&#xff0c;请看我的博客&#xff1a;CentOS7 源码编译安装NodeJS 最新版本 2&#xff0c;npm环境搭…

频段表_5G频段范围之:频段3.3GHz-4.2GHz (n77,n78)

本文版权归“5G通信(tongxin5g)”和5G哥所有&#xff0c;未经授权&#xff0c;请勿转载比起以前的移动通信网络&#xff0c;5G探索的新频谱范围包括&#xff1a;3.3GHz-4.2GHz&#xff0c;4.4GHz-5.0GHz&#xff0c;24.25-29.5 GHz今天主要看频段3.3GHz-4.2GHz在3GPP中&#xf…

Signals Slots(Qt5)

>Signal-Slot的作用是对象间的通信; Signals-Slots机制是Qt的核心特性, 也可能是Qt和其他大多数框架提供的特性不同的部分; 介绍 >GUI编程中, 当我们改变了一个widget,经常希望另一个widget能被通知到; 通常我们希望各种对象间能互相通信. Example: 用户点击了CLOSE按钮,…

公开说说别人看不到_当听到别人在说自己坏话时,心里是什么感受?

人有优点也有缺点这世界上&#xff0c;没有人的性格可以做到十全十美。没有任何一个人从头到尾都是完美无缺的。一个人自从慢慢的长大后&#xff0c;在不断的社交活动中&#xff0c;就会慢慢的观察别人身上的优点或者缺点了。很奇怪&#xff0c;人的这种能力和本领好像是不需要…

CentOS 7 利用Docker搭建Showdoc文档管理系统

1&#xff0c;系统环境 a&#xff0c;操作系统 CentOS Linux release 7.6.1810 (Core) 64位 b&#xff0c;确保Docker环境已经安装&#xff0c;具体教程请看 CentOS 安装docker Docker部署Showdoc官方教程&#xff1a;https://www.showdoc.cc/help?page_id65610 2&…

制作安装媒体来部署额外域控制器

cmd&#xff1a;1. ntdsutil2. activate instance ntds3. ifm4. create [full|rodc] d:\InstallMedia5. quit6. quit转载于:https://blog.51cto.com/babylater/1182185

求最大公约数和最小公倍数

// 求两数的最大公约数 默认 a>bpublic static int func(int a,int b){return a % b0?b:func(b,a%b);}// 求两数的最小公倍数 默认 a>bpublic static int func2(int a,int b){int m a * b;return m / func(a,b);}

深度学习attention原理_深度学习Anchor Boxes原理与实战技术

深度学习Anchor Boxes原理与实战技术目标检测算法通常对输入图像中的大量区域进行采样&#xff0c;判断这些区域是否包含感兴趣的目标&#xff0c;并调整这些区域的边缘&#xff0c;以便更准确地预测目标的地面真实边界框。不同的模型可能使用不同的区域采样方法。在这里&#…

Linux利用nginx-gridfs搭建部署Nginx和MongoDB文件服务器,支持用户密码验证!

nginx-gridfs是一个nginx的扩展模块&#xff0c;用于支持直接访问MongoDB的GridFS文件系统上的文件并提供 HTTP 访问 1&#xff0c;安装nginx&#xff0c;下载好安装包nginx和nginx-gridfs&#xff0c;此次安装采用nginx1.12.2. mkdir -p /data/soft/nginx-mongodb/ # 创建…

安装Exchange 2010 时报错UserMailbox 必须强制使用 Database

安装Exchange 2010 时报错"UserMailbox 必须强制使用 Database"故障描述&#xff1a;在原有Exchange Server 2010 SP1的环境安装新的服务器上报"UserMailbox 必须强制使用 Database。 属性名称: Database"错&#xff0c;详细如下&#xff1a;错误:运行&quo…

三行代码生成验证码并转换成base64

使用 Hutool 工具类 import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.LineCaptcha; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Console; import sun.misc.BASE64Encoder;import java.io.File; import java.io.FileInputStream; import…

android 垂直的开关_安卓布局:如何让这两个按钮水平垂直居中

代码&#xff1a; 代码&#xff1a;android:id"id/linearLayout1" android:layout_width"wrap_content" android:layout_height"wrap_content" android:layout_alignParentBottom"true" android:layout_alignParentLeft"true&quo…

docker 创建容器报: Error response from daemon: C: drive is not shared.

报错 C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: C: drive is not shared. Please share it in Docker for Windows Settings. See C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help.这时候我们需要绑定盘符…

CentOS 7 搭建swagger Api文档管理系统

1&#xff0c;系统环境 a&#xff0c;操作系统 CentOS Linux release 7.6.1810 (Core) 64位 b&#xff0c;安装Node.js的npm工具环境&#xff1a; # Node 官网已经把 linux 下载版本更改为已编译好的版本了&#xff0c;我们可以直接下载解压后使用&#xff1a; wget http…

【Jectpack 基础】Jetpack Compose 文本居中的实现方法

在Jetpack Compose中&#xff0c;实现文本居中显示是一个常见的需求。本文将介绍一种简单而有效的方法&#xff0c;通过使用Compose的Modifier和Alignment属性来轻松实现文本的居中显示。 问题背景&#xff1a; 在开发中&#xff0c;我们经常需要将文本在其容器中水平和垂直方…

oracle数据库导入_oracle数据库导入数据

Oracle数据导入导出imp/exp功能&#xff1a;Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。Oracle有个好处&#xff0c;虽然你的电脑不是服务器&#xff0c;但是你装了oracle客户端&a…