当前位置: 首页 > news >正文

数据结构与算法---单调栈结构

数据结构与算法---单调栈结构

  • 1 滑动窗口问题
  • 1 滑动窗口问题


 

1 滑动窗口问题

 

由一个代表题目,引出一种结构

【题目】

有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。
例如,数组为[4,3,5,4,3,3,6,7],窗口大小为3时:
[4 3 5] 4 3 3 6 7 窗口中最大值为5
4[3 5 4]3 3 6 7 窗口中最大值为5
4 3[5 4 3] 3 6 7 窗口中最大值为5
4 3 5[4 3 3] 6 7 窗口中最大值为4
4 3 5 4[3 3 6] 7 窗口中最大值为6
4 3 5 4 3 [3 6 7] 窗口中最大值为7

如果数组长度为n,窗口大小为w,则一共产生 n-w+1 个窗口的最大值。

请实现一个函数。 输入: 整型数组arr,窗口大小为w

输出:一个长度为 n - w + 1的数组resres[i] 表示每一种窗口状态下的最大值 以本题为例,结果应该
返回{5,5,5,4,6,7}

public class SlidingWindowMaxArrTest {public static void main(String[] args) {int[] arr = {4, 3, 5, 4, 3, 3, 6, 7};final int w = 3;int[] windowMaxArr = getWindowMaxArr(arr, w);for (int i = 0; i < windowMaxArr.length;i++){System.out.print(windowMaxArr[i] + " ");}System.out.println();}/*** @param arr* @param w   窗口的宽度* @return*/public static int[] getWindowMaxArr(int[] arr, int w) {if (arr == null || arr.length < w || w < 1) {return null;}/*** 双端队列 存放数组的索引*  队列的头部存放最大值的索引*/LinkedList<Integer> qMax = new LinkedList<>();// 滑动窗口最大值数组int[] retArr = new int[arr.length - w + 1];int index = 0;for (int i = 0; i < arr.length; i++) {// 放入队列的元素 要保证队列头部的值是最大的// 放入的时候发现队列的最后一个元素没有大于arr[i] 则 弹出while (!qMax.isEmpty() && arr[i] >= arr[qMax.peekLast()]) {qMax.pollLast();}qMax.addLast(i);// 队列中的头部的元素过期if (qMax.peekFirst() == i - w) {qMax.pollFirst();}if (i >= w - 1) {retArr[index++] = arr[qMax.peekFirst()];}}return retArr;}
}

 

1 滑动窗口问题

 

http://www.lryc.cn/news/194385.html

相关文章:

  • Python爬虫:某书平台的Authorization参数js逆向
  • Android MediaCodec 框架 基于codec2
  • 【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)
  • Go TLS服务端绑定证书的几种方式
  • 【算法与数据结构】--高级算法和数据结构--排序和搜索
  • 【Java】jvm 元空间、常量池(了解)
  • Spring Boot自动加载
  • MPNN 模型:GNN 传递规则的实现
  • Flink kafka 数据汇不指定分区器导致的问题
  • 【软考】14.1 面向对象基本概念/分析设计测试
  • MFC-对话框
  • Essential Steps in Natural Language Processing (NLP)
  • Flink中KeyBy、分区、分组的正确理解
  • QT6集成CEF3--01 准备工作
  • 随机误差理论与测量
  • 树莓派4b配置通过smbus2使用LCD灯
  • UPS 原理和故障案例分享
  • Stream流中的 max()和 sorted()方法
  • 云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载
  • PDE数值解中,为什么要引入弱解(weak solution)的概念?
  • 使用pdfjs实现在线预览pdf
  • 汇编语言基础
  • 格式工厂怎么把两个视频合并在一起
  • 2.MySQL表的操作
  • 网络安全之应急流程
  • [Python进阶] 操纵鼠标:pyuserinput
  • 【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置
  • 与HTTP相关的各种协议
  • 常见的网络攻击手段
  • 学习笔记---超基础+详细+新手的顺序表~~