算法 滑动窗口最大值-(双指针+队列)

news/2024/5/20 9:20:58 标签: 滑动窗口, 双指针, 队列

牛客网: BM45

题目: 数组num, 窗口大小size, 所有窗口内的最大值

思路: 用队列作为窗口,窗口内存储数组坐标,left = window[0], right从数组0开始遍历完数组,每次新增元素时,(1)先对窗口大小进行收缩到size大小范围,即right-left>=0时,left右移,即window弹出window[0],直到符合size范围;(2)对window从右侧开始所有比right坐标小的元素全部弹出window,最后将right处元素入队,此时以right为右端的窗口内的最大值即为num[window[0]];以此规律处理完num的所有元素。

注意: window进行收缩时要注意len(window)>0

代码:

// go

package main
// import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param num int整型一维数组 
 * @param size int整型 
 * @return int整型一维数组
*/
func maxInWindows( num []int ,  size int ) []int {
    // write code here
    if len(num) < size || size == 0 || len(num) == 0 {
        return []int{}
    }
    res := []int{}
    window := []int{}
    for i := 0; i < size; i++ {
        for len(window) > 0 && num[window[len(window)-1]] < num[i] {
            window = window[:len(window)-1]
        }
        window = append(window, i)
    }
    res = append(res, num[window[0]])

    for i := size; i < len(num); i++ {
        for len(window)>0 && i - window[0] >= size {
            window = window[1:]
        }
        for len(window) > 0 && num[window[len(window)-1]] < num[i] {
            window = window[:len(window)-1]
        }
        window = append(window, i)
        res = append(res, num[window[0]])
    }

    return res
}


http://www.niftyadmin.cn/n/5042772.html

相关文章

Echarts散点图筛选新玩法dataZoom

目录 前言 一、引入Echarts5.4.3 二、新建index.html 三、绑定Echarts展示元素 四、初始数据绑定 五、option设置 六、效果展示 七、参数说明 总结 前言 如果您在日常的工作当中也会遇到如下场景&#xff0c;需要在线对已经展示出来的图表进行进一步的筛选&#xff0c…

k8s-2 集群升级

首先导入镜像到本地 然后上传镜像到仓库 在所有集群节点 部署cri-docker k8s从1.24版本开始移除了dockershim&#xff0c;所以需要安装cri-docker插件才能使用docker 配置cri-docker 升级master 节点 升级kubeadm 执行升级计划 修改节点套接字 腾空节点 升级kubelet 配置k…

配置测试ip、正式ip、本地ip

目的&#xff1a;npm run serve启动本地服务&#xff0c;npm run test打包测试环境&#xff0c;npm run build打包正式环境。 具体做法如下&#xff1a; 一、在项目中新增三个环境的文件 .env.development VITE_BASE_URLhttp://192.168.1.12:8080/ .env.production VITE_…

Linux,计算机网络,数据库

Linux&#xff0c;计算机网络&#xff0c;数据库&#xff0c;操作系统 一、Linux1、linux查看进程2、linux基本命令3、top命令、查看磁盘 二、计算机网络1、HTTP的报文段请求 Repuest响应 Response 2、HTTP用的什么连接3、TCP的三次握手与四次挥手三次握手四次挥手 4、在浏览器…

9.19 校招 实习 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 9.19 校招 实习 内推 面经 1、校招丨中联重科2024届校园招聘&#xff08;内推&#xff09; 校招丨中联重科2024届校园招聘&#xff08;内推&#xff09; 2、2023校招总结--SLAM/C开发 - 8 2…

注册苹果开发者账号步骤揭秘,创建证书全攻略

​ 目录 转载&#xff1a;注册苹果开发者账号的方法 转载&#xff1a;注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&…

vue3兼容flv和m3u8的插件(hls.js和flv.js)

1.下载插件 cnpm install hls.js flv.js导入项目 import Hls from hls.js import flvjs from flv.js使用 <script setup>// m3u8格式视频使用变量const player ref(null)const video ref(null)// flv格式视频使用const videoRef ref(null)let flvPlayer null// 这…

【190】Java8利用红黑树实现Map

红黑树的定义 红黑树是一种特殊类型的二叉搜索树&#xff08;Binary Search Tree&#xff0c;缩写BST&#xff09;&#xff0c;除了满足二叉搜索树的定义外&#xff0c;还要满足下面五个红黑树特性&#xff1a; 每个节点要么是红色&#xff0c;要么是黑色&#xff0c;必须二选…