Java怎么实现滑动窗口的最大值
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍"Java怎么实现滑动窗口的最大值"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java怎么实现滑动窗口的最大值"文章能帮助大家解决问题。一、
千家信息网最后更新 2025年01月18日Java怎么实现滑动窗口的最大值
这篇文章主要介绍"Java怎么实现滑动窗口的最大值"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java怎么实现滑动窗口的最大值"文章能帮助大家解决问题。
一、题目
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
二、单调队列解析
题目让求随着滑动窗口的滑动,返回窗口覆盖范围的最大值
该题不适合优先级队列,因为采用大顶堆存放k个数字,可以知道此时的最大值,但是窗口是滑动的,大顶堆每次只能弹出最大值,无法移除其他值,即无法用大顶堆维护滑动窗口里的值。
所以采用队列维护,随着窗口的移动,队列先进先出
此时对队列的要求是,队列首位为最大值,整个队列呈递减
例如:1,3,-1,-3,5,3,6,7
初始:1,3,-1,队列存入3,-1,使其保持递减,且首位为此时滑动窗口的最大值
移动到-3,队列:3,-1,-3
移动到5,队列:5
移动到3,队列:5,3
移动到6,队列:6
移动到7,队列:7
所以为了满足要求,需要自定义队列
从示例可以看出,队列没必要维护窗口里所有元素,只需要保证队列首位此时窗口的最大,而且,队列元素为递减,具体看代码
三、代码
import java.util.Deque;import java.util.LinkedList;//自定义数组class MyQueue { Deque deque = new LinkedList<>(); //弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出 //同时判断队列当前是否为空 void poll(int val) { if (!deque.isEmpty() && val == deque.peek()) { deque.poll(); } } //添加元素时,如果要添加的元素大于入口处的元素,就将入口元素弹出 //保证队列元素单调递减 //比如此时队列元素3,1,2将要入队,比1大,所以1弹出,此时队列:3,2 void add(int val) { while (!deque.isEmpty() && val > deque.getLast()) { deque.removeLast(); } deque.add(val); } //队列队顶元素始终为最大值 int peek() { return deque.peek(); }}class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums.length == 1) { return nums; } int len = nums.length - k + 1; //存放结果元素的数组 int[] res = new int[len]; int num = 0; //自定义队列 MyQueue myQueue = new MyQueue(); //先将前k的元素放入队列 for (int i = 0; i < k; i++) { myQueue.add(nums[i]); } res[num++] = myQueue.peek(); for (int i = k; i < nums.length; i++) { //滑动窗口移除最前面的元素,移除是判断该元素是否放入队列 myQueue.poll(nums[i - k]); //滑动窗口加入最后面的元素 myQueue.add(nums[i]); //记录对应的最大值 res[num++] = myQueue.peek(); } return res; }}
关于"Java怎么实现滑动窗口的最大值"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
队列
元素
最大
最大值
移动
数组
知识
单调
代码
入口
数值
数字
行业
题目
保证
不同
实用
必要
优先级
先进
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
求信息与网络安全教材pdf
路客互联网科技有限公司
串口服务器485转以太网原理
软件开发多久能拿一万
ip地址访问服务器
伦敦网络安全新闻
gta怎么玩其他服务器
请检查数据库是否正确
app软件开发公司河南网联
早期网站是如何连接数据库的
软件开发的环境风险
郑州项目软件开发
工业软件开发技巧
教育直播软件开发套
联想s系列服务器
统计系统面临的网络安全形势
阿里云服务器添加硬盘
网络安全技术设备设施
局域网软件开发
清华计算机系软件开发
长宁区网络营销软件开发供应商家
网络安全防范操
火山软件开发平台python
网络技术实战教程
互联网科技公司的税收政策
服务器u盘启动插哪里
小额贷款app软件开发
服务器资源怎么云化
家庭服务器是什么
长沙智斓软件开发有限公司