239. 滑动窗口最大值(难)

news/2024/10/30 14:43:36/文章来源:https://www.cnblogs.com/lushuang55/p/18515169

目录
  • 题目
  • 法一、暴力枚举
  • 法二、双端队列

题目

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

法一、暴力枚举

  • 遍历数组,获取每个窗口的子数组,找到当前窗口的最大值并加入结果数组
var maxSlidingWindow = function(nums, k) {let res = [];for (let i = 0; i <= nums.length - k; i++) {// 获取当前窗口的子数组let window = nums.slice(i, i + k);// 找到当前窗口的最大值let maxVal = Math.max(...window);// 将最大值加入结果数组res.push(maxVal);}return res;
};
  • 超出时间限制

法二、双端队列

  • 思路:挨个遍历数组,用一个双端队列往对列右边加入,如果对列中存在比当前元素小的就左边弹出,如果超过了滑动窗口的范围也缩小左边 ,每到滑动窗口的大小时就将最大值(第一个元素)放进结果数组。
var maxSlidingWindow = function(nums, k) {let res = [];let deque = []; // 用于存储当前窗口内有用元素的索引for (let i = 0; i < nums.length; i++) {// 移除不在窗口内的元素:确保窗口大小不超过kif (deque.length && deque[0] < i - k + 1) {deque.shift();//删除数组第一个元素}// 移除小于当前元素的元素索引while (deque.length && nums[deque[deque.length - 1]] < nums[i]) {deque.pop();//删除数组的最后一位}// 将当前元素索引加入到 dequedeque.push(i);//向数组尾部添加// 从第 k-1 个元素开始,添加当前窗口的最大值到结果数组if (i >= k - 1) {res.push(nums[deque[0]]);//最后的对列是单调的,第一个元素是最大的}}return res;
};

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

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

相关文章

Jenkins执行Shell脚本超时错误处理指南

Jenkins执行Shell脚本超时错误处理指南 在使用Jenkins进行自动化测试时,经常会遇到需要执行Shell脚本的情况。然而,当Shell脚本执行时间过长,超过了Jenkins配置的超时限制时,就会导致构建任务失败。本文将为你详细介绍如何处理Jenkins执行Shell脚本时的超时错误。 问题现象…

macOS电脑与Android设备实现文件传输,Android File Transfer下载安装使用教程

一:macOS电脑无法直接连接Android设备的原因:1、系统兼容性差异,macOS和Android设备分别属于不同的操作系统平台,它们在底层架构、文件系统以及数据传输协议等方面存在显著的差异。这种系统兼容性差异导致macOS无法直接识别并访问Android设备的文件系统。 2、驱动支持问题,…

USB协议详解第30讲(USB枚举过程详解及抓包分析)

当USB设备连接到或从USB中移除时,主机使用总线枚举过程来识别和管理接入的设备。当USB设备连接到一个已经被上电的端口,采取以下顺序行动: 1.设备上电 用户把USB设备插入USB端口(主机下的根hub或主机下行端口上的hub端口)或系统启动时设备上电。此时,USB设备处于加电状态…

ccs的介绍,安装和使用入门

第一章:ccs的介绍,下载和安装 01:ccs介绍 工欲善其事必先利其器,如果你正在打算学习DSP,那么需要准备以下三个东西: 1) DSP开发板,当然任何具有DSP最小系统的板子都是可以的; 2) 仿真器,仿真器用来将程序烧写到DSP中,同时具备在线仿真调试的功能; 3) 编译环境CCS…

2024-10-29

多表查询 内连接外连接子查询

多租户系统的核心概念模型

大家好,我是汤师爷~ 让我们深入探讨一下多租户系统的概念模型。概念模型是多租户系统的"骨架",帮助我们理解系统各部分的组织和运作方式。 多租户的核心概念模型租户:通常指一个企业客户,不同租户之间的数据和行为是相互隔离的。 用户:某个租户内的具体使用者,…

【笔记】【Android】Activity的Task模式

【笔记】【Android】Activity的Task模式 笔记系列,内容是从网络搜索的结果,不一定是正确的理解。 如果存在谬误,欢迎大家指正。 Task 一个应用可能会包含多个Activity,管理这些Activity顺序的容器,就是Task。当Activity1拉起Activity2时,Task会将Activity2压栈,将显示Ac…

USB协议详解第28讲(USB硬件设计和热拔插原理)

1.USB引脚接线定义 对于四线制的USB,即USB1.0、USB1.1和USB2.0,USB硬件接口有4根接线,如下图。引脚 名称 电缆颜色 描述1 VBUS Red +5 V,电源2 D− White Data −,数据线3 D+ Green Data +,数据线4 GND Black Ground,接地2.低速USB设备硬件设计原理 低速设备端在*D-*上集…

HarmonyOS:应用性能优化实践

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18515687➤如果链接不是为敢技术的博客园…

ARM和X86架构

原文链接:https://zhuanlan.zhihu.com/p/21266987 CPU的这两大架构:ARM和X86。 要了解X86和ARM,就得先了解复杂指令集(CISC)和精简指令集(RISC) 从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基…

HarmonyOS:自由流转介绍

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18515669➤如果链接不是为敢技术的博客园…

manim边学边做--通用二维坐标系

Manim的Axes对象是通用的坐标系对象,之前几篇介绍的数轴和各种坐标平面都是继承Axes对象。 Axes对象的主要作用在于创建和管理二维坐标轴,以满足我们制作数学动画时的各种需求。 具体来说,Axes对象可以帮助我们:定义坐标系:定义一个明确的坐标系,通过设置x轴和y轴的范围、…