滑动窗口最大值 (大小为 K 的所有子数组的最大值)2024 年 8 月 28 日 | 阅读 9 分钟 传统上,要找到数组中的最大元素,我们会使用一个循环遍历所有元素并返回该值。下面提供了伪代码实现。 伪代码 滑动窗口最大值技术是一种在给定大小的窗口中查找数组中每个窗口最大元素的方法。这项技术在许多应用中很有用,例如处理流式数据时,您需要在每一步中查找固定大小元素窗口中的最大元素。 要实现滑动窗口最大值技术,您可以使用嵌套循环方法,其中外层循环遍历数组中的窗口,内层循环查找每个窗口中的最大元素。或者,您可以使用堆等数据结构来跟踪每个窗口中的最大元素,从而降低算法的时间复杂度。 在这两种情况下,滑动窗口最大值技术的 time complexity 为 O(n) 或 O(nlogk),具体取决于实现。 C 代码 输出 3 4 5 Maximum element in the array: 5 说明 在此实现中,find_sliding_window_maximum 函数接收数组 arr、其大小 n 以及窗口大小 k。然后它遍历数组并查找大小为 k 的每个窗口中的最大元素。最后,它打印每个窗口中的最大元素并返回整个数组中的最大元素。 请注意,此实现的时间复杂度为 O(nk),因为它使用嵌套循环来查找每个窗口中的最大元素。通过使用堆等数据结构来跟踪每个窗口中的最大元素,可以改进这一点,将时间复杂度降低到 O(nlogk)。 C++ 代码 输出 3 3 5 6 7 说明 此实现使用双端队列 (deque) 来存储数组元素的索引。deque 始终维护以下不变量: deque 中的元素按非递减顺序排列,最大元素位于前面,最小元素位于后面。deque 中的元素位于当前窗口内。 这些不变量使我们能够在线性时间内有效地找到每个子数组的最大值。此实现的时间复杂度为 O(n)。 Java 代码 输出 3 3 5 5 6 7 Java 中的伪代码 (使用堆栈方法) Python 代码 输出 3 3 4 5 5 5 6 C# 代码 输出 33 4 5 5 5 6 JavaScript 代码 输出 3 3 4 5 5 5 6 为什么滑动窗口技术比查找最大元素的所有其他方法都更好?滑动窗口最大值技术是一种用于查找数组中给定大小的每个窗口中的最大元素的有用算法。它通常用于必须处理流式数据并在每一步查找固定大小窗口中最大元素的应用中。 滑动窗口最大值技术可能比查找最大元素的所有其他方法更好的一个原因是,它可以使用简单的嵌套循环方法实现,该方法的 time complexity 为 O(nk),其中 n 是数组的大小,k 是窗口的大小。与其他方法相比,这相对有效,例如对数组进行排序并查找最大元素,其 time complexity 为 O(nlogn)。 滑动窗口最大值技术可能更好的另一个原因是,它可以轻松修改以使用堆等数据结构来跟踪每个窗口中的最大元素,从而将 time complexity 降低到 O(nlogk)。这可能比查找大型数组中最大元素的所有其他方法更有效,特别是如果窗口的大小远小于数组的大小。 总而言之,滑动窗口最大值技术是一种有用且高效的算法,用于查找数组中给定大小的每个窗口中的最大元素。 下一主题AVL 树操作 |
引言 是由一组虚拟基础设施附加组件组成,这些组件共同使包括政府、公司和个人在内的各种实体能够以电子方式进行交互并进行交易。它是一组开放的应用程序编程接口 (API) 和数字公共物品,旨在解锁……的经济基础。
阅读 4 分钟
当使用垂直顺序遍历算法遍历二叉树时,与根垂直的节点会被收集在一起。节点按从上到下、在同一垂直距离内按从左到右的顺序处理。我们可以使用映射或……
5 分钟阅读
简介二元矩阵的介绍矩阵:二维矩阵是使用仅两个不同元素:0 和 1 的基本算术系统。表示为二维数组,二维矩阵由行和列组成,每个单元格为 0 或 1。这个简短的符号用于...
阅读 6 分钟
以哥伦比亚数学家 Bernardo Recamán Santos 的名字命名的,是一个迷人的整数序列,吸引了数学家和计算机科学家。它由一个简单但有趣的规则定义,使其成为一个极好的 Java 探索主题。理解 Recamán 序列始于第一个...
阅读 6 分钟
引言:每个程序的基础是原始数据结构,通常称为基本数据结构。它们是计算机语言的一部分,用于表示数字、字符和布尔值等基本数据类型。什么是原始数据结构?原始数据结构,也……
阅读 4 分钟
什么是 AVL 树? Adelson-Velskii 和 Landis 发现了它,所以名字来源于他们的名字,即 AVL。它通常被称为高度平衡二叉树。AVL 树是指在每个节点处具有以下特征之一的二叉树...
阅读 4 分钟
简介:图论是数学的一个分支,它为分析和理解各种实体之间的关系提供了一个强大的框架。在图论的众多概念中,这些路径是理解连通性和遍历可能性的基本且引人入胜的主题,它们在...中至关重要。
阅读 8 分钟
引言 任何城市或地区都需要高效的交通基础设施才能顺利运行。公交和火车总站对于实现人流和货物流至关重要。确定处理预期交通量所需的最低平台数量,同时减少拥堵和延误,是其中一个关键问题...
阅读 4 分钟
引言:在计算机体系结构中,尤其是在微处理器和微控制器领域,是一个关键的组成部分。它是一种特殊的指针,始终指向堆栈的顶部。堆栈是一种线性数据结构,其中插入和删除仅发生在...
5 分钟阅读
归并排序是一种递归方法,它反复将列表分成两半。如果列表为空或仅包含一个项目(基本情况),则列表已排序。如果列表包含多个项目,我们将其分成两半并递归地...
阅读 29 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India