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

LeetCode220831_92、滑动窗口最大值

给你一个整数数组 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解、用队列双端存储数组的索引,根据索引对应元素判断是否需要弹出队尾和队首。

当 (索引+ 1)未达到窗口长度时,不记录最大值,并且当后续元素大于队尾元素时弹出队尾元素,保障队首为最大

队首元素是否在窗口长度内,若queue.peek() <= i - k 则说明队首元素已在窗口外,需要弹出。

满足窗口长度后,每进行一次遍历在结果数组添加有效的队首元素。

class Solution{
    public int[] maxSlidingWindow(int[] nums, int k){
        if(nums == null || nums.length < 2) return nums;
        LinkedList<Integer> queue = new LinkedList<>();
        int[] res = new int[nums.length - k + 1];
        for(int i = 0; i < nums.length; i++){
            while(!queue.isEmpty() && nums[i] > nums[queue.peekLast()]){
                queue.pollLast();
            }
            queue.addLast(i);
            if(queue.peek() <= i - k){
                queue.poll();
            }
            if(i + 1 >= k){
                res[i + 1 - k] = nums[queue.peek()];
            }
            
        }
        return res;
    }
}

相关文章:

  • 哈希碰撞概率计算
  • 2021年超全中高级Java工程师面试题+答案
  • 阿里新产MySQL性能优化实践笔记,GitHub已获千万推荐
  • yolov5篇---官方ultralytics / yolov5代码复现,训练自己的数据集
  • avalanche 配置dns解析域名
  • 【Wordpress】wordpress根据需要DIY配置(更新中)
  • 遥感影像分类任务的复现
  • springboot+vue实现登录案例(附VUE整个项目代码)
  • 如何使用LOTO示波器 绘制 频率响应特性曲线?
  • 智能科学与技术——介绍概要
  • Controller设计--Kafka从入门到精通(十五)
  • 数据结构之查找和排序
  • CREO:CREO软件之工程图界面的【创建】、【布局】、【表】、【注释】的简介(图文教程)之详细攻略
  • .NET 回调、接口回调、 委托
  • 儒家思想发展历程
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • angular2 简述
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • express如何解决request entity too large问题
  • httpie使用详解
  • Java IO学习笔记一
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript 原型链
  • javascript从右向左截取指定位数字符的3种方法
  • jQuery(一)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • orm2 中文文档 3.1 模型属性
  • PermissionScope Swift4 兼容问题
  • spring-boot List转Page
  • webpack4 一点通
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 探索 JS 中的模块化
  • 网页视频流m3u8/ts视频下载
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云重庆大学大数据训练营落地分享
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • $$$$GB2312-80区位编码表$$$$
  • (1)(1.11) SiK Radio v2(一)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (30)数组元素和与数字和的绝对差
  • (a /b)*c的值
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (十一)图像的罗伯特梯度锐化
  • (算法)Game
  • (一)Thymeleaf用法——Thymeleaf简介
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • . NET自动找可写目录
  • .net 7 上传文件踩坑
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net FrameWork简介,数组,枚举
  • .net 获取url的方法