算法——单调队列

news/2024/7/5 4:48:01

单调队列

什么是单调队列,想必大家对单调函数还有所印象,单调队列和单调函数类似,一个队列中的元素是递增或者递减的。

如何构建单调队列呢

并没有单调队列,那么如何构建呢,可以通过双端队列Deque 来进行构建。

注意事项

根据题意合适的选择 递增还是递减并过略掉一些不需要的元素。

leetcode239

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        ArrayDeque<Integer> deq=new ArrayDeque<Integer>();
        int []res=new int[nums.length-k+1];
        int idx=0;
        for(int i=0;i<nums.length;i++){
            //因为要去除元素 所以记录的i
            while(!deq.isEmpty()&&deq.peek()<i-k+1){
                deq.pollFirst();
            }
            //因为头要弹出去 队列中剩下的比他小的也要弹出去 所以从后面开始 从前面开始可能会导致中间某个数大 从而不能保证每个头都是大的
            while(!deq.isEmpty()&&nums[deq.peekLast()]<nums[i]){
                deq.pollLast();
            }
            deq.addLast(i);

            if(i>=k-1){
               res[idx]=nums[deq.peek()];
               idx++;
            }
        }

        return res;

    }
}

因为头要弹出去 队列中剩下的比他小的也要弹出去 所以从后面开始 从前面开始可能会导致中间某个数大 从而不能保证每个头都是大的
举例解释
假如数组为 [1,3,1,2,0,5]

判断头队列元素为

1
3
31
312
120 =>输出头为1 并不是最大的

判断尾队列元素为

1
3
31
32
20
5


http://lihuaxi.xjx100.cn/news/1533423.html

相关文章

插值与拟合的区别以及如何选取

插值和拟合都是用于处理数据的方法&#xff0c;但它们的目标和方法有所不同。 1. 插值 插值是在已有数据点之间估计未知数据点的数值。插值方法通过构建一个曲线或曲面&#xff0c;通过已知数据点之间的函数关系来估计在这些数据点之间的数值。插值方法通常用于填补数据间的空…

前端通过第三插件uuid 生成一个 uuid

有时候 后端会让我们自己生成一个uuid 我们没必要自己去写 直接用第三方插件就好了 先终端执行 npm install uuid这样 我们第三方插件就进来了 然后 引入一定要根据环境来 //TS环境引入 import { v4 as uuidv4 } from uuid; //js环境引入 const { v4: uuidv4 } require(uui…

华脉智联发布国标28181 Android SDK和DEMO

在目前很多行业项目中&#xff0c;客户使用的是海康、大华等监控平台的GB/28181平台&#xff0c;或者是其他的第三方的GB/28181平台。但是对于那些不具备GB/28181协议的单兵终端&#xff0c;如何接入GB/28181平台网络中呢&#xff1f; 首先&#xff0c;我们了解下GB/T28181&…

第17章_瑞萨MCU零基础入门系列教程之CAN FD 模块

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Kafka入门,这一篇就够了(安装,topic,生产者,消费者)

目录 Kafka的安装文件与配置目录binconfig 配置文件server.propertiesproducer.propertiesconsumer.properties 命令行简单使用kafka-topics.sh新增查看列表查看详情修改删除 kafka-console-producer.shkafka-console-consumer.sh 概念集群代理broker主题topic分区partition偏移…

日志平台搭建第二章:Linux使用docker安装elasticsearch-head

一、elasticsearch-head的安装启动 #下载镜像 docker pull alivv/elasticsearch-head #启动 docker run -d --name eshead -p 9100:9100 alivv/elasticsearch-head 查看日志 docker logs -f eshead 出现如下证明启动成功 浏览器访问9100端口&#xff0c;出现以下页面也说明…

嵌入式系统设计与应用---嵌入式系统概述(学习笔记)

目录​​​​​​​ 嵌入式系统 概念 组成 嵌入式常用的操作系统 与PC机的区别 开发 软件开发 硬件开发 嵌入式处理器 分类 嵌入式系统 概念 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可载剪&#xff0c;适应对功能、可靠性、成本&#xff0c…

【干货】风控建模中把原始变量转成WOE实现(Python)

很多刚开始建模的同学,对原始变量转WOE都是一知半解,弄不清楚为什么要转WOE,也不清楚要怎么把变量转成WOE。对于WOE原理不清楚的小伙伴,可以先看下本公众号之前的文章:风控建模中的IV和WOE。本文重点讲解用Python中的toad库实现变量的WOE转换。 文章目录 一、WOE的定义二、…