11 滑动窗口最大值

news2024/11/25 15:56:29

滑动窗口最大值

    • 题解1 优先队列(大顶堆)(双循环没过)
      • 改进后
    • 题解2 单调队列deque(设计同labuladong)
      • 标准题解(同接雨水,deque存下标)

题解1 优先队列(大顶堆)(双循环没过)

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        for(int i = 0; i < nums.size()-k+1; i++){
        // 大顶堆stl 没办法优雅地把nums[i]移除
            priority_queue<int> heapqueue;
            for(int j = i; j < i+k; j++)
                heapqueue.push(nums[j]);
            res.push_back(heapqueue.top());
        }
        return res;
    }
};

在这里插入图片描述

改进后

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        // 改变存储的结构,大根堆默认对pair的第一数据项排序
        priority_queue<pair<int, int>> heapque;
        for(int i=0; i < k-1; i++){
        // heapque.push(pair<int, int>(nums[i], i));
            heapque.emplace(nums[i], i);
        }
        
        for(int i = k-1; i < nums.size(); i++){
            heapque.emplace(nums[i], i);
            // Key:不合理的(不该出现在这个窗口内的)最大值先pop掉
            while(heapque.top().second <= i-k)
                heapque.pop();
            res.push_back(heapque.top().first);
        }
        return res;
    }
};

在这里插入图片描述

题解2 单调队列deque(设计同labuladong)

class Solution {
public:
    class Myqueue{ 
        // 前后都可插
        deque<int> q;
        public:
            void push(int n){
                // 把value < n的移除掉
                // 因为单调队列 n如果入队列,比n小的就不会是该窗口的最大值了 (扔掉)
                // 维持单调队列,首位最大
                while(! q.empty() && q.back() < n){
                    q.pop_back();
                }
                q.push_back(n);
            }
            int max(){
                return q.front();
            }
            void pop(int n){
                // 如果n是最大值再pop
                // 和push逻辑闭合
                if(n == q.front())
                    q.pop_front();
            }

    };
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        Myqueue Que;
        for(int i = 0; i < nums.size(); i++){
            if(i < k-1){
                Que.push(nums[i]);
            }else{
                Que.push(nums[i]);
                res.push_back(Que.max());
                Que.pop(nums[i-k+1]);
            }
        }
        return res;
    }
};

在这里插入图片描述

标准题解(同接雨水,deque存下标)

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        int n = nums.size();
        deque<int> q;
        for (int i = 0; i < k; ++i) {
        // 维持q是一个单调队列
        // q存储下标(存储所有还没有被移除的下标),且对应的值单调递减
            while (!q.empty() && nums[i] >= nums[q.back()]) {
                q.pop_back();
            }
            q.push_back(i);
        }

        vector<int> ans = {nums[q.front()]};
        for (int i = k; i < n; ++i) {
        // 每加一次都做一次剔除
        // 可以改成inline 或者 匿名函数
            while (!q.empty() && nums[i] >= nums[q.back()]) {
                q.pop_back();
            }
            q.push_back(i);
            // 替代了上面自定义的pop (同大根堆方法,剔除不在窗口的最大值)
            while (q.front() <= i - k) {
                q.pop_front();
            }
            ans.push_back(nums[q.front()]);
        }
        return ans;
    }
};

在这里插入图片描述

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

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

相关文章

77 # koa 中间件的应用

调用 next() 表示执行下一个中间件 const Koa require("koa");const app new Koa();app.use(async (ctx, next) > {console.log(1);next();console.log(2); });app.use(async (ctx, next) > {console.log(3);next();console.log(4); });app.use(async (ctx,…

aardio语言简易中英单词翻译

import win.ui; /*DSG{{*/ mainForm win.form(text"简易中英文单词离线翻译";right757;bottom467;bgcolor15780518) mainForm.add( buttonWord{cls"button";text"翻译(CtrlS)";left121;top384;right279;bottom425;z3}; editFrom{cls"edit&…

官方项目《内容示例》中Common UI部分笔记:Common UI 分场景使用教程

文章目录 前言0. 通用设置0.1 开启插件0.2 设置Viewport 1. 分场景教程1. 1 在仅使用鼠标控制的场景下Common Activatable StackCommon Activatable Widget 1.2 当焦点落到一个按钮时显示默认确认&#xff08;Click/Accept&#xff09;按键图标Common Input Action DataBaseInp…

JVM--Hotspot Architecture 详解

一、Java Virtual Machine &#xff08;JVM&#xff09;概述 Java Virtual Machine 虚拟机 &#xff08;JVM&#xff09; 是一种抽象的计算机。JVM本身也是一个程序&#xff0c;但是对于编写在其中执行的程序来说&#xff0c;它看起来像一台机器。对于特定的操作系统&#xff…

docker介绍和安装

docker安装 下载Docker依赖组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker的镜像源为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo 安装Docker服务 yum -y install docker-ce 安…

Python 3.x 异常处理

文章目录 异常处理1. 什么是异常2. Python 中的异常python 中异常演示错误类型捕获try-except 语句带有多个 expect 的 try 语句捕获未知错误 异常参数else 子句finally子句练习 3&#xff1a;简化除法判断 3. 自定义异常抛出异常—raise应用场景抛出异常练习 4&#xff1a;自定…

innovus:route within pin 和限制pin shape内via 数量

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 setNanoRouteMode -routeWithViaInPin "1:1" setNanoRouteMode -routeWithViaOnlyForStandardCellPin "1:1"

git 后悔药

前言 自上而下&#xff0c;撤销可以分为从远程库撤销&#xff0c;从本地库撤销&#xff0c;从暂存库撤销。 例子&#xff1a;代码已经提交了三个记录到远程库&#xff0c;分别对应了记录1&#xff0c;内容1&#xff0c;记录2&#xff0c;内容2&#xff0c;记录3&#xff0c;内…

LeetCode73.矩阵置零

这道题我感觉还是挺简单的&#xff0c;一下子就想到了&#xff0c;不过我的算法很简单很垃圾&#xff0c;效率很低&#xff0c;我一看完题的想法就是直接遍历一遍数组&#xff0c;然后把为0的元素的行和列都存起来&#xff0c;然后把这些行和列都置零就好了&#xff0c;但是这里…

IP地址、子网掩码、网络地址、广播地址、IP网段

文章目录 IP地址IP地址分类子网掩码网络地址广播地址IP网段 本文主要讨论iPv4地址。 IP地址 实际的 IP 地址是一串32 比特的数字&#xff0c;按照 8 比特&#xff08;1 字节&#xff09;为一组分成 4 组&#xff0c;分别用十进制表示然后再用圆点隔开&#xff0c;这就是我们平…

chkdsk H:/F

chkdsk H:/F TF卡损坏

nios里面打开eclipse遇到Unresolved inclusion: “system.h“等问题

问题&#xff1a;在Nios中打开软核部分代码时&#xff0c;遇到一堆Unresolved inclusion: "system.h"等问题报错 原因&#xff1a;bsp文件和软核没关联&#xff0c;导致找不到头文件地址&#xff0c;关联一下就好 解决步骤&#xff1a; 右键bsp文件&#xff0c;点击…

虚幻引擎集成web前端<一>:win环境UE4.27导出像素流并集成到vue2环境(附案例)

本案例附件&#xff1a;https://download.csdn.net/download/rexfow/88303544 第一部分&#xff1a;虚幻引擎导出像素流windows包 第1步&#xff1a;软件设置 -AudioMixer -PixelStreamingIPlocalhost -PixelStreamingPort8888 第2步&#xff1a;信令服务器设置 1、执行run_l…

2023移动软件开发实验6

2023年夏季《移动软件开发》实验报告 姓名和学号&#xff1f;本实验属于哪门课程&#xff1f;中国海洋大学23夏《移动软件开发》实验名称&#xff1f;实验6&#xff1a;推箱子博客地址&#xff1f;XXXXXXXGithub仓库地址&#xff1f;https://github.com/enfantsRichesDeprimes…

十三、MySQL(DQL)语句执行顺序

1、DQL语句执行顺序: &#xff08;1&#xff09;from来决定表 # where来指定查询的条件 &#xff08;2&#xff09;group by指定分组 # having指定分组之后的条件 &#xff08;3&#xff09;select查询要返回哪些字段 &#xff08;4&#xff09;order by根据字段内容&#…

7.0: Dubbo服务调用源码解析

课程内容 服务提供者处理请求流程解析服务消费发送请求流程解析服务提供者端线程模型解析服务消费者端线程模型解析1.服务提供者处理请求流程解析 processon链接:服务调用流程图| ProcessOn免费在线作图,在线流程图,在线思维导图 2. 服务消费端执行逻辑 MockClusterInvoker.in…

【大数据之Kafka】七、Kafka Broker之Kafka副本

1 副本基本信息 Kafka 副本可以提高数据可靠性。分为Leader 和 Follower&#xff1b;Kafka 生产者只会把数据发往 Leader&#xff0c;然后 Follower 找Leader 进行同步数据。   Kafka 默认副本 1 个&#xff0c;生产环境一般配置为 2 个&#xff0c;保证数据可靠性&#xff1…

SAP-PP:基础概念笔记-4(物料主数据视图)

文章目录 前言一、基本视图二、分类视图三、销售视图四、采购五、生产计划和执行视图六、总工厂数据/存储七、质量管理八、会计九、成本系统创建示例&#xff1a;创建一个齿轮物料的主数据事务代码:MM01&#xff0c;另一种方式spro->xxxx 总结 前言 物料主数据为许多组织创…

linux并发服务器 —— 项目实战(九)

阻塞/非阻塞、同步/异步 数据就绪 - 根据系统IO操作的就绪状态 阻塞 - 调用IO方法的线程进入阻塞状态&#xff08;挂起&#xff09; 非阻塞 - 不会改变线程的状态&#xff0c;通过返回值判断 数据读写 - 根据应用程序和内核的交互方式 同步 - 数据的读写需要应用层去读写 …

DX底图还原

直接定位到这个地方 我们可以看到他有一个Bn函数&#xff0c;其中传入的参数有n,e,r,t 分别是这些东西 但是我们只需要还原的列表就得看是哪一段是咯 An((i (i r.split("/"))[i.length - 1]).split(".")[0]) 发现是他之后我们就直接把这个函数扣下来&…