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

LeetCode-239.滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 。

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值


[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:

输入:nums = [1], k = 1
输出:[1]

public int[] maxSlidingWindow(int[] nums, int k) {// 参数校验,如果数组为空或者窗口大小k为0,则返回空数组if (nums.length == 0 || k == 0) {return new int[0];}// 定义结果数组,其长度为nums数组长度减去窗口大小k再加1int[] res = new int[nums.length - k + 1];// 定义双端队列,用于存储窗口中的元素下标Deque<Integer> deque = new LinkedList<>();// 定义左右指针,初始化为-k和0,表示窗口的起始位置for (int i = 1 - k, j = 0; j < nums.length; i++, j++) {// 1. 如果队首元素等于当前右指针指向的元素,将其从双端队列中移除// 这是因为该元素已经移动到窗口的右边界之外if (i > 0 && deque.peekFirst() == nums[i - 1]) {deque.removeFirst();}// 2. 删除双端队列中所有小于当前右指针指向元素的值// 因为这些值不可能是当前窗口中的最大值while (!deque.isEmpty() && deque.peekLast() < nums[j]) {deque.removeLast();}// 将当前右指针指向的元素添加到双端队列中deque.addLast(nums[j]);// 3. 如果左指针已经到达数组的起始位置(即窗口已经包含了k个元素)// 则将队首元素的值(即当前窗口中的最大值)添加到结果数组中if (i >= 0) {res[i] = deque.peekFirst();}}// 返回结果数组return res;
}

相关文章:

  • 用增之Google
  • 24、Linux网络端口
  • 详解redis配置文件
  • SQL常用语句--模糊查询LIKE
  • Android 编译 C 文件报错 fatal error: ‘jni.h‘ file not found
  • 网络安全中攻击溯源方法
  • 对人脸图像进行性别和年龄的判断
  • 结构体指针
  • 【Java高级教程】集合部分
  • 【Qt快速入门(一)】- Qt简介
  • 用Python获取Windows本机安装的所有应用程序的实现与分析
  • npm镜像源管理、nvm安装多版本node异常处理
  • 【算法实战】每日一题:17.1 订单处理问题(差分思想,二分搜索)
  • 【数据库系统概论】数据库设计过程
  • 我的app开始养活我了
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【Amaple教程】5. 插件
  • es6(二):字符串的扩展
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • interface和setter,getter
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js如何打印object对象
  • mysql常用命令汇总
  • ng6--错误信息小结(持续更新)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • supervisor 永不挂掉的进程 安装以及使用
  • VuePress 静态网站生成
  • 入门级的git使用指北
  • 微信小程序开发问题汇总
  • 小程序开发中的那些坑
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 怎样选择前端框架
  • 正则与JS中的正则
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​卜东波研究员:高观点下的少儿计算思维
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (windows2012共享文件夹和防火墙设置
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)Knockout 创建自定义绑定
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (四)stm32之通信协议
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .Net 6.0 Windows平台如何判断当前电脑是否联网
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net web项目 调用webService
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】