牛客热题:滑动窗口的最大值

news2024/11/15 9:35:31

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:滑动窗口的最大值
    • 题目链接
    • 方法一:暴力
      • 思路
      • 代码
      • 复杂度
    • 方法二:单调双端队列
      • 思路
      • 代码
      • 复杂度

牛客热题:滑动窗口的最大值

题目链接

滑动窗口的最大值_牛客题霸_牛客网 (nowcoder.com)

方法一:暴力

思路

  • 枚举每个区间的起始
    • 然后遍历每个区间获取最大值放入到ret中

代码

vector<int> maxInWindows(vector<int>& num, int size) 
    {
        int n = num.size();
        vector<int> ret;
        if(size == 0 || size > n) return ret;

        for(int i = 0 ; i + size - 1 < n; ++i)
        {
            int max_val = -10010;
            for(int j = 0; j < size; ++j)
            {
                max_val = max(max_val, num[i + j]);
            }
            ret.push_back(max_val);
        }

        return ret;
    }

复杂度

时间复杂度:O(N * M) ,其中N是数组的长度,M为size的大小

空间复杂度:O(N), 使用了一个N - size长度的数组用来返回答案

方法二:单调双端队列

思路

  • step1:对于数组长度为0,窗口长度为0,或者窗口长度超过num的直接返回空数组
    • step2:遍历数组,维护单调队列,将队列尾部小于当前数组元素的值全部出队。
    • step3:将当前值入队尾部
    • step4:判断当前对头的下标是否超过区间长度的限制,如果超过则出队头
    • step5:当前遍历的数组下标大于等于区间的长度,那么则将对头放入到答案数组
  • step6:遍历结束,返回答案数组即可

代码

    vector<int> maxInWindows(vector<int>& num, int size) 
    {
        int n = num.size();
        vector<int> ret; 
        deque<int> dp;
        if(n == 0 || size == 0 || size > n) return ret;

        for(int i = 0; i < n; ++i)
        {
            //除去队列中比当前值小的值
            while(!dp.empty() && num[dp.back()] < num[i])
                dp.pop_back();

            //将当前下标入队列
            dp.push_back(i);

            //判断队列头部的下标是否超过序列长度
            if(i - dp.front() >= size)
                dp.pop_front();
            //将最大值放入到答案中
            if(i + 1 >= size)
                ret.push_back(num[dp.front()]);
        }

        return ret;
    }

复杂度

时间复杂度:O(N), 遍历了一遍数组,求出了所有滑动窗口的最大值

空间复杂度:O(N),其中开辟了N - size大小的答案数组,和最大为size长度的双端队列

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月26日预测第2弹

昨天的8883大底成功命中&#xff0c;但是由于昨天杀了对子&#xff0c;结果昨天开了对子&#xff0c;导致最终与中奖号码擦肩而过。今天继续基于8883的大底&#xff0c;使用尽可能少的条件进行缩号&#xff0c;同时&#xff0c;今天将准备两套方案&#xff0c;一套是我自己的条…

【重制版】Unity Meta Quest 一体机开发(一):前期准备,Meta XR SDK导入和环境配置,配置玩家物体

文章目录 &#x1f4d5;教程说明&#x1f4d5;Meta XR SDK 介绍&#x1f4d5;前期准备⭐开启开发者模式⚡在 Meta 官网申请开发者⚡在 Meta Quest 手机 APP 开启开发者 ⭐电脑需要下载的软件⚡Meta Quest Link&#xff08;以前叫做Oculus PC客户端&#xff09;⚡Oculus ADB Dri…

Overleaf中出现文字越界、越下届、没有正确分页、换页的原因和解决方法

在使用overleaf中&#xff0c;我偶尔会遇到如标题所说的情况&#xff0c;也如图所示&#xff1a; 后来发现&#xff0c;是因为这一页前面是一个表格&#xff0c;所以怀疑是表格的格式导致的。所以让chatgpt帮我更换了表格的格式&#xff0c;成功解决问题。 对于问题可能的成因…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引⽤操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

docker 进入容器报错OCI runtime exec failed

今天进入docker容器的时候一直报错 OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown 执行命令 docker exec -it 容器id /bin/sh 可进入

ThreadPoolExecutor线程池使用以及源码解析

文章目录 1. 引子2. 线程池源码分析2.1. 总览2.2. Executor2.3. ExecutorService2.4. AbstractExecutorService2.5. ThreadPoolExecutor构造函数核心参数阻塞队列拒绝策略核心属性线程池状态Worker 类execute() 方法addWorker() 方法runWorker() 方法getTask() 方法processWork…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档&#xff1a; https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

运算符优先级详解:从一元到布尔运算的全面指南

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、一元运算符&#xff1a;最高优先级 三、二元运算符&#xff1a;紧随其后的优…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

分布式Id/框架/发号器一文介绍

文章目录 一、分布式id介绍1、什么是分布式id2、分布式id的特点 二、UUid生成算法1、JDK UUID2、Snowflake 雪花算法3、PearFlower 梨花算法4、Mist 薄雾算法 三、常见发号器服务1、数据库1&#xff09;自增2&#xff09;号段模式 2、NoSQL 四、常见框架1、百度UIDGenerator2、…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

Java核心: 脚本引擎和动态编译

静态语言和动态语言的在相互吸收对方的优秀特性&#xff0c;取人之长补己之短。脚本引擎和动态编译就是其中一个关键特性&#xff0c;扩展了Java的能力边界。这一篇我们主要讲两个东西: ScriptEngine&#xff0c;执行脚本语言代码&#xff0c;如JavaScript、Groovy JavaCompile…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类&#xff0c;并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

TOTP 算法实现:双因素认证的基石(C/C++代码实现)

双因素认证&#xff08;Two-Factor Authentication, 2FA&#xff09;扮演着至关重要的角色。它像是一道额外的防线&#xff0c;确保即便密码被窃取&#xff0c;不法分子也难以轻易突破。在众多双因素认证技术中&#xff0c;基于时间的一次性密码&#xff08;Time-Based One-Tim…

springmvc Web上下文初始化

Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…

摸鱼大数据——Hive基础理论知识——Hive环境准备

Hive环境准备 1、shell脚本执行方式 方式1: sh 脚本 注意: 需要进入脚本所在目录,但脚本有没有执行权限不影响执行 方式2: ./脚本 注意: 需要进入脚本所在目录,且脚本必须有执行权限 方式3: /绝对路径/脚本 注意: 不需要进入脚本所在目录,但必须有执行…

记录一次Netty的WSS异常

概述 业务场景 应用通过 WSS 客户端连接三方接口。在高并发压测时&#xff0c;出现了请求服务器写入失败的异常&#xff0c;该异常是偶发&#xff0c;出现的概率不到千分之一&#xff0c;异常如下图所示。 问题概述 注意&#xff1a; 因为握手是通过 http 协议进行的。所以…

在AndroidStudio创建虚拟手机DUB-AI20

1.DUB-AI20介绍 DUB-AL20是华为畅享9全网通机型。 华为畅享9采用基于Android 8.1定制的EMUI 8.2系统&#xff0c;最大的亮点是配置了1300万AI双摄、4000mAh大电池以及AI人脸识别功能&#xff0c;支持熄屏快拍、笑脸抓拍、声控拍照、手势拍照等特色的拍照功能&#xff0c;支持移…

1960-2022年世界银行WDI面板数据(1400+指标)

1960-2022年世界银行WDI面板数据&#xff08;1400指标&#xff09; 1、时间&#xff1a;1960-2022年 2、来源&#xff1a;世界银行WDI 指标&#xff1a;包括健康、公共部门、农业与农村发展、城市发展、基础设施、外债、性别、援助效率、教育、气候变化、环境、社会保护与劳…