C++ 滑动窗口算法2024 年 8 月 28 日 | 3 分钟阅读 滑动窗口技术 是一种计算方法,旨在用单个循环 替换嵌套循环,从而减少时间复杂度。 滑动窗口技术让我们用一个类比来帮助我们理解这个策略。考虑一个固定在长度为 n、长度为 k 的窗口内的窗格。 在窗格处于其起始位置(即距左侧 0 个单位)时,将窗口中的 n 元素数组 arr[] 与窗格中的 k 元素当前和结合起来。如果我们推动窗口,它将移动一个单位距离。窗格将覆盖接下来的 k 个组件。 滑动窗口技术的应用示例示例 给定一个大小为 "n" 的整数数组,我们的目标是获取数组中前 "k" 个成员的最大和。 我们通过添加大小为 4 的子数组 {4, 2, 10, 23} 来获得最大和。 由于整个数组的大小为 2,因此没有大小为 3 的子数组。 朴素方法现在让我们使用暴力方法 来分析这个问题。我们从第一个索引开始,递增到第 k 个元素。每组 k 个项目或块(可以相互跟随)都这样做。这种方法的嵌套 for 循环中的内部 或嵌套 循环将相加直到第 k 个元素。外部 for 循环从 k 个项目块中的第一个项目开始。 思考以下应用 输出 34 从上面包含两个嵌套循环的代码可以看出,时间复杂度 为 O(k*n)。 考虑一个长度为 n 的窗口和一个固定在其中的长度为 k 的窗格,以便更好地理解滑动窗口技术。请记住,窗格最初位于最左侧,即距左侧 0 个单位。现在,将窗口与 n 元素数组 arr[] 相关联,将窗格与 k 元素当前和相关联。如果我们现在对窗口施加力,它将向前移动一个单位距离。窗格将覆盖接下来的 k 个组件。 使用滑动窗口方法我们使用线性循环 计算 n 个项中前 k 个项的和,并将结果存储在变量 window sum 中。然后,我们将在数组中线性遍历,直到它到达末尾,同时持续跟踪最大和。 只需将当前块的最后一个元素 添加到前一个块的第一个元素,即可获得 k 个项目块的当前总和。 窗口在数组上移动,如下图所示。 输出 34 现在我们可以看到我们的代码只有一个循环,很明显时间复杂度 是线性的。因此,时间复杂度 是 O(n)。 下一个主题C++ 中的自下而上方法是什么 |
partition point() 获取分区点:返回一个迭代器,指向范围 [first, last] 中第一个谓词 pred(predicate) 为 false 的分区元素,表示该元素的 the partition point。如同使用相同的输入调用了 partition 一样,该范围的元素必须已经...
阅读 4 分钟
C++ 为构建者提供了有效且灵活的工具集,而一个经常被忽视的宝藏是 forward_list 类。在其众多功能中,forward_list::splice_after() 功能作为操作链接列表的有效工具而脱颖而出。在这篇博文中,我们将探讨...
阅读 4 分钟
C++ 是一种类似的编程语言,它结合了 C 编程语言和 Simula67 的特性(Simula67 被认为是第一门面向对象的语言)。C++ 建立了类和对象的概念。您是否正在寻找一本入门好书...
阅读 6 分钟
C++ 模板与 Java 泛型 在开发大型项目时,我们需要代码能够与提供给它的任何类型的数据兼容。这就是您编写的代码与其他代码区分开来的地方。我们在这里的意思是,您编写的代码应该...
阅读 3 分钟
C++ 中的 std::array::crbegin 函数是 std::array 类模板的成员函数,该类模板是标准模板库 (STL) 的一部分。此函数用于获取指向 std::array 最后一个元素的逆向迭代器。换句话说,它用于...
阅读 6 分钟
在本文中,您将通过示例了解 C++ 中二叉树的直径。连接二叉树中任意两个节点最长路径的边数允许我们计算二叉树的直径。二叉树的直径...
5 分钟阅读
C 标准库包含 vswprintf() 函数,它经常在 C 和 C++ 编程中用于格式化宽字符字符串。尽管它使用宽字符(wchar_t)而不是常规字符(char),但它与 vsprintf() 函数相似。语法:vswprintf() 的通用语法如下:#include...
阅读 2 分钟
: 堆栈:堆栈是 C++ 编程语言中的一种线性数据结构,遵循后进先出 (LIFO) 原则。最后添加的元素是第一个删除的元素。因此,它实际上是元素的集合。堆栈,类似于实际的堆栈或堆积,例如...
阅读 17 分钟
在本文中,我们将讨论 C++ 中 Apriori 算法的实现。在讨论其实现之前,我们必须了解 Apriori 算法。Apriori 算法用于在数据集中查找频繁项集,以揭示项之间的关联。它迭代地生成候选项集...
7 分钟阅读
在本文中,您将学习如何在 C++ 中自定义未捕获异常的终止行为。在 C++ 中,std::set_terminate 方法允许应用程序在未捕获异常发生时采取自定义响应。它使您能够指定一个唯一的处理程序,如果……
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India