当前位置: 首页 > news >正文

2025年- H27-Lc135- 239.滑动窗口最大值(自定义双端队列)---java版

1.题目描述

在这里插入图片描述

2.思路

(1)双端队列可以移除最左边的元素,也可以移除最右边的元素(两端移除)
(2)在最右边插入元素(右边加入)
(3)队列单调性(保持队列是单调递减)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码实现

import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;public class H239 {public int[] maxSlidingWindow(int[] nums, int k) {//1.获取数组的长度int n=nums.length;//2.创建一个双端队列,存储的是数组的下标Deque<Integer> dq=new LinkedList<>();//3.// 初始化前 k 个元素,准备好第一个滑动窗口for(int i=0;i<k;i++) {//用while循环,队列不为空且当前元素nums[i]要大于队尾元素while (!dq.isEmpty() && nums[i]>=nums[dq.peekLast()]) {dq.pollLast(); //4.将队尾元素pop移出}//5. 将当前元素下标加入队尾,从队尾插入元素!!!!忘记了dq.offerLast(i);}//6.创建一个结果数组用来保存每次滑动窗口的最大值int[] res=new int[n-k+1];//7.结果数组的第一个元素是当前最大的元素。res[0]=nums[dq.peekFirst()];for(int i=k;i<n;++i){//8.判断队首元素是不是滑出当前的滑动窗口,判断队列的第一个元素是否过期,小于等于索引0 ,则移出while(!dq.isEmpty()&&dq.peekFirst()<=i-k){dq.pollFirst();}// 关键:移除所有小于当前元素的尾部元素!!!忘记了while (!dq.isEmpty() && nums[i] >= nums[dq.peekLast()]) {dq.pollLast();}dq.offerLast(i);// 加入当前元素的下标//9.当前窗口的最大值就是队首元素对应的值,将每次滑动窗口的队首元素都加入到结果数组中。res[i-k+1]=nums[dq.peekFirst()];}//10.返回结果数组return res;}public static void main(String[] args){H239 test=new H239();int[] nums={1,3,-1,-3,5,3,6,7};int k=3;int[] res= test.maxSlidingWindow(nums,k);
//System.out.println("输出滑动窗口的最大值:"+res); 不会输出数组内容.Java中直接打印数组会输出的是对象地址,比如 [I@5e2de80c。System.out.println("输出滑动窗口的最大值:"+ Arrays.toString(res));}
}
http://www.xdnf.cn/news/514567.html

相关文章:

  • 量子计算在金融科技中的应用前景
  • [Codeforce刷题8]
  • 无废话离线大模型安装
  • 【随机过程】贝叶斯估计
  • 游戏引擎学习第292天:实现蛇
  • es聚合-词条统计
  • 量子计算 | 量子密码学的挑战和机遇
  • LWIP的NETCONN接口
  • APP手机端测试覆盖点
  • 专业漏洞扫描机构如何助力企业保障安全并提升竞争力?
  • 【MySQL】库与表的操作
  • 力扣热题——数组的最小相等和
  • 关于 Web 漏洞原理与利用:1. SQL 注入(SQLi)
  • 基于FPGA的电子万年历系统开发,包含各模块testbench
  • ​Docker 网络
  • 前端三剑客之HTML
  • 深入解析Python中的Vector2d类:从基础实现到特殊方法的应用
  • nginx服务器实验
  • 23种设计模式解释+记忆
  • 虚幻引擎5-Unreal Engine笔记之`GameMode`、`关卡(Level)` 和 `关卡蓝图(Level Blueprint)`的关系
  • 快速上手SElinux
  • 第8章 常用实用类
  • 基于shardingsphere的分库分表方案
  • redis读写一致问题
  • Visual Studio已更新为17.14+集成deepseek实现高效编程
  • AI大模型(二)embedding模型调用后对产生的数据进行分析
  • 水平可见直线--上凸包(andrew算法
  • 【嵙大o】C++作业合集
  • 不同版本 Linux 系统账号操作指令 ——rtkit 账号删除、普通账号的创建 / 删除 / 权限修改超详细大全
  • 如何在 Windows 11 或 10 上安装 Amazon Corretto