C++ 活动选择问题2024 年 8 月 28 日 | 3 分钟阅读 活动选择是计算机科学中的一个经典问题,可以使用贪心算法解决。在这个问题中,我们给定一组要在给定时间内执行的活动,每个活动都有一个开始时间和一个结束时间。目标是选择可以执行的最大数量的活动,使得任何两个活动都不重叠。 让我们考虑一个例子来更好地理解这个问题。假设你有五个活动:A、B、C、D 和 E,每个活动的开始和结束时间如下: A:开始 = 1,结束 = 4 B:开始 = 3,结束 = 5 C:开始 = 0,结束 = 6 D:开始 = 5,结束 = 7 E:开始 = 8,结束 = 9 我们可以看到,如果我们执行活动 A 和 D,就会发生冲突,因为这两个活动重叠。因此,目标是选择可以执行的最大数量的活动,且没有任何冲突。这个问题的解决方案可以使用贪心算法找到。贪心算法的思想是始终选择第一个完成的下一个活动。这确保我们有最大的时间来完成下一个活动。 以下是我们如何在 C++ 中实现活动选择问题: C++ 代码 在上面的代码中,我们首先根据活动的结束时间对活动进行排序,因为我们希望选择第一个完成的活动。然后,我们使用两个指针 i 和 j 来跟踪当前活动和下一个活动。我们从 i = 0 和 j = 1 开始,并将下一个活动的开始时间与当前活动的结束时间进行比较。如果下一个活动的开始时间大于或等于当前活动的结束时间,我们可以在没有任何冲突的情况下执行这两个活动,因此我们递增 j 并设置 i = j。这会一直持续到 j 到达数组的末尾。此算法的时间复杂度为 O(n log n),因为我们首先需要对活动进行排序,这需要 O(n log n) 的时间。此算法的空间复杂度为 O(1),因为我们没有使用任何额外的空间。 输出 Following activities are selected: (1, 2), (3, 4), (5, 7), (8, 9), 说明 上面的代码使用 C++ 中的贪心算法实现了活动选择问题。活动选择问题是计算机科学中的一个经典问题,其中我们给定一组要在给定时间内执行的活动,每个活动都有一个开始时间和一个结束时间。目标是选择可以执行的最大数量的活动,且没有任何冲突,使得任何两个活动都不重叠。 代码首先包含 bits/stdc++.h 头文件,其中包含所有标准 C++ 库。然后,定义 Activity 结构来存储每个活动的开始和结束时间。接下来,定义比较函数,用于根据活动的结束时间对活动进行排序。我们根据活动的结束时间对活动进行排序的原因是,我们希望选择第一个完成的活动。这确保我们有最大的时间来完成下一个活动。 printMaxActivities 函数将活动数组及其大小作为参数,并实现贪心算法来解决活动选择问题。该函数首先使用 sort 函数和比较函数根据活动的结束时间对活动进行排序。 下一主题C++ 中的活动选择程序 |
在本文中,您将通过示例了解 C++ 中二叉树的直径。连接二叉树中任意两个节点最长路径的边数允许我们计算二叉树的直径。二叉树的直径...
5 分钟阅读
C++中的名称修饰和extern "C"概念我们知道C++编程语言功能强大,是业界用于游戏机开发的广泛使用的编程语言。它支持重载功能,这意味着我们可以定义具有不同参数的函数...
阅读 3 分钟
在本文中,我们将讨论 C++ 中字符串的字典序排名。但在实现之前,我们必须了解字典序。字典序或字典序排序(通常称为字母顺序或字典排序)是单词按照字母顺序的组织方式……
5 分钟阅读
在本文中,我们将编写一个程序来合并两个未排序的数组。输出是升序排序的数组。输入:a[] = {10, 5, 15} b[] = {20, 3, 2} 输出:合并后的排序数组 {2, 3, 5, 10, 15, 20} 输入:...
阅读 4 分钟
什么是单例类? C++ 中的单例类是一种设计模式,可确保一个类只有一个实例,并提供该实例的全局访问点。它限制了一个类可以创建的对象数量,因为...
阅读 6 分钟
C++ 编程语言的基础基于面向对象编程 (OOP) 的概念。由于 C++ 提供了清晰的结构,用户可以轻松开发和理解程序的概念。此外,由于函数是紧凑的代码片段,因此该概念已被......
阅读 4 分钟
在 C++ 中,typeid 运算符是一个内置运算符,允许您在运行时检索对象的类型信息。它是一个强大的工具,可用于测试、调试和编写更有效、更灵活的代码。typeid 运算符接受一个参数...
阅读 10 分钟
在编写 C++ 程序来检查数字是否为阿姆斯特朗数之前,让我们了解什么是阿姆斯特朗数。阿姆斯特朗数是一个等于其数字立方和的数字。例如 0、1、153、370、371 等。
阅读1分钟
这个 C++ 食品店管理系统项目包含客户和产品搜索、显示、修改和删除等功能。此程序在允许用户提交订单前,会搜索文件中存储的客户信息。该软件专为小型...
阅读 19 分钟
在本文中,您将了解 C++ 中的 mbsrtowcs() 函数及其示例。在 C/C++ 中,mbsrtowcs() 函数是管理字符串中字符转换的有效工具。它是标准 C 库的一个重要组成部分,可帮助开发人员处理各种字符……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India