62、滑动窗口的最大值

一、题目

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

二、解法

 1 package algorithm7;
 2 
 3 import java.util.ArrayList;
 4 import java.util.LinkedList;
 5 //使用双端队列
 6 /*
 7  对新来的元素k,将其与双端队列中的元素相比较
 8  *     1)前面比k小的,直接移出队列(因为不再可能成为后面滑动窗口的最大值了!),
 9  *     2)前面比k大的X,比较两者下标,判断X是否已不在窗口之内,不在了,直接移出队列
10  *     队列的第一个元素是滑动窗口中的最大值*/
11 public class MaxInWindows64 {
12     public static void main(String[] args) {
13         int[] num = {2,3,4,2,6,2,5};
14         ArrayList<Integer> res = maxInWindows(num,3);
15         for(int i : res){
16             System.out.print(i + " ");
17         }
18     }
19     public static ArrayList<Integer> maxInWindows(int [] num, int size){
20         ArrayList<Integer> res = new ArrayList<>();
21         if(size == 0 || size > num.length)
22             return res;
23         int begin;
24         LinkedList<Integer> q = new LinkedList<>();
25         //先将前size-1个数中的符合条件的值 加入双端队列中
26         for(int i = 0; i < size - 1; i++){
27             while(!q.isEmpty() && num[i] > num[q.getLast()]){
28                 q.removeLast();
29             }
30             q.addLast(i);
31         }
32         for(int i = size-1; i < num.length; i++){
33             while(!q.isEmpty() && num[i] > num[q.getLast()]){
34                 q.removeLast();
35             }
36             q.addLast(i);
37             if(i-q.getFirst()+1 > size)
38                 q.removeFirst();
39             res.add(num[q.getFirst()]);
40         }
41         return res;
42     }
43 }

 

转载于:https://www.cnblogs.com/fankongkong/p/7462165.html

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

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

相关文章

KestrelServer详解[2]: 网络连接是如何创建的?

《KestrelServer详解[1]&#xff1a;注册监听终结点&#xff08;Endpoint&#xff09;》已经详细讲述了如何使用KestrelServer&#xff0c;现在我们来简单聊聊这种服务器的总体设计和实现原理。当KestrelServer启动的时候&#xff0c;注册的每个终结点将转换成对应的“连接监听…

PHP操作文件和目录的相关函数

//判断文件类型 filetype(a.php);//打开或创建文件 fopen(a.php,w);//读取文件 fgets(a.php);//按行读取 fread(a.php,1049);//按块读取 file_get_contents(a.php);//读取文件//复制文件 copy(a.php,./b.php);//将a.php复制到b.php//删除文件 unlink(b.php);//移动文件 rename(…

linux LyX中文编辑环境安装配置指南-TeX可视化工具

TeX可以说是国际上排版的标准&#xff0c;尤其是论文、书籍之类&#xff0c;对公式的表现比MS办公系列强的太多&#xff0c;格式异常优美&#xff0c;但是由于其比较复杂的命令&#xff0c;非可视化编辑&#xff0c;所以使得入门门槛较高&#xff0c;所以出现了LaTeX这样的命令…

pandas DataFrame 数据处理常用操作

Xgboost调参&#xff1a; https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/article/details/78064362 pandas DataFrame中的空值处理&#xff1a; https://blog.csdn.net/yuanxiang01/article/details/78738812 pandas的DataFrame、…

redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法...

解决spring-data-redis操作redis集群报“Jedis does not support password protected Redis Cluster configurations”的异常 原因&#xff1a;使用spring-data-redis操作redis集群时由于redis集群设置了密码。 解决方案&#xff1a;升级spring-data-redis版本即可解决&#xf…

支付宝支付开发流程

支付宝开发流程1、首先我们先谈谈第三方支付所谓第三方支付就是和一些各大银行签约&#xff0c;并具备一定实力和信誉保障的第三方独立机构提供的交易平台目前市面上常见的有支付宝&#xff0c;财付通&#xff0c;网银&#xff0c;易宝支付等&#xff0c;网站需要实现第三方支付…

MQ消息队列之MSMQ

主要参考文章&#xff1a; 消息队列&#xff08;Message Queue&#xff09;简介及其使用 转载于:https://www.cnblogs.com/mailaidedt/p/6599130.html

css选择器总结

一.选择器 1. css1选择器 2.css2选择器 3.css3选择器 4.:nth-of-type(n)和:nth-child(n)区别 (1).在不指定类型时&#xff0c;nth-child(n)选中的是父元素下的第N个子元素。nth-of-type(n)选中的是父元素下的不同类型标签的第N个。(2).在指定具体元素时,ele:nth-child(n)要求不…

Hypercrx:开源项目不只有Star

01战队简介大家好&#xff0c;我们是Hypercrx战队&#xff0c;非常荣幸获得了首届Microsoft Edge浏览器开拓者大赛的一等奖&#xff01;我是队长唐烨男&#xff08;中&#xff09;&#xff0c;位于我左侧的是宁志成&#xff0c;右侧的是林以任&#xff0c;我们都来自华东师范大…

《Python编程快速上手 让繁琐工作自动化》pdf

<div id"article_content" class"article_content tracking-ad" data-mod"popu_307" data-dsm"post"> <p><br></p><p>下载地址&#xff1a;<a target"_blank" href"https://page74.c…

PHP上传图片到数据库,并进行显示

1、创建数据表 CREATE TABLE ccs_image (id int(4) unsigned NOT NULL auto_increment,description varchar(250) default NULL,bin_data longblob,filename varchar(50) default NULL,filesize varchar(50) default NULL,filetype varchar(50) default NULL,PRIMARY KEY (id)…

Keras版Faster-RCNN代码学习(IOU,RPN)1

最近开始使用Keras来做深度学习&#xff0c;发现模型搭建相较于MXnet, Caffe等确实比较方便&#xff0c;适合于新手练手&#xff0c;于是找来了目标检测经典的模型Faster-RCNN的keras代码来练练手&#xff0c;代码的主题部分转自知乎专栏Learning Machine&#xff0c;作者张潇捷…

欧拉函数模板

一、单个欧拉函数计算 可评测链接&#xff1a;http://codevs.cn/problem/4939/ 单个欧拉函数计算公式&#xff1a;φ&#xff08;n&#xff09;n*&#xff08;1-1/p1&#xff09;*&#xff08;1-1/p2&#xff09;*……*&#xff08;1-1/pn&#xff09; Step 1&#xff1a; 一边…

洛谷P1145 约瑟夫

题目描述 n个人站成一圈&#xff0c;从某个人开始数数&#xff0c;每次数到m的人就被杀掉&#xff0c;然后下一个人重新开始数&#xff0c;直到最后只剩一个人。现在有一圈人&#xff0c;k个好人站在一起&#xff0c;k个坏人站在一起。从第一个好人开始数数。你要确定一个最小的…

.NET 反向代理-YARP

什么是 YARPYARP (另一个反向代理) 设计为一个库&#xff0c;提供核心代理功能&#xff0c;你可以根据应用程序的特定需求进行自定义。YARP 是使用 .NET的基础架构构建在 .NET上的。YARP 的主要不同之处在于&#xff0c;它被设计成可以通过 .NET 代码轻松定制和调整&#xff0c…

JavaScript 开发的45个经典技巧

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;此篇译文在各网站均有标注原创的声明&#xff0c;译者名字已不可考&#xff0c;暂为佚名 JavaScript是一个绝冠全球的编程语言&#xff0c;可用于Web开发、移动应用开发&#xff08;PhoneGap、Appcelera…

PHP循环输出二维数组

目的: 将二维数组中的每一个元素输出 首先定义一个二维数组 //定义数组 $arr array(array(北京,上海,深圳,广州),array(黑龙江,吉林,辽宁,江苏) ); 一 for循环输出 1.1 直接输出 //for循环遍历数组 for($i 0; $i < count($arr); $i) {for($j 0; $j < count($arr[…

回归远程 - 云原生IDE是IaC从表象触达本质的必然选择 | SmartIDE

作者&#xff1a;徐磊&#xff0c;开源云原生SmartIDE创始人、LEANOSFT创始人/首席架构师/CEO&#xff0c;微软最有价值专家MVP/微软区域技术总监Regional Director&#xff0c;华为云最有价值专家。从事软件工程咨询服务超过15年时间&#xff0c;为超过200家不同类型的企业提供…

android获取手机机型、厂商、deviceID基本信息

/*** 系统工具类*/ public class SystemUtil {/*** 获取当前手机系统语言。** return 返回当前系统语言。例如&#xff1a;当前设置的是“中文-中国”&#xff0c;则返回“zh-CN”*/public static String getSystemLanguage() {return Locale.getDefault().getLanguage();}/***…

题目1362:左旋转字符串(Move!Move!!Move!!!)

题目1362&#xff1a;左旋转字符串&#xff08;Move!Move!!Move!!!&#xff09; 时间限制&#xff1a;2 秒 内存限制&#xff1a;32 兆 特殊判题&#xff1a;否 提交&#xff1a;2306 解决&#xff1a;961 题目描述&#xff1a;汇编语言中有一种移位指令叫做循环左移&#xff0…