Python 中的跳跃游戏问题2024年8月29日 | 阅读 10 分钟 在这个问题中,我们将有一个整数数组。数组中每个索引处的整数指定了我们可以从该索引跳出的最大长度。我们需要找出到达数组最后一个索引所需的跳跃次数。我们需要返回所有跳跃次数中的最小值。如果无法通过任何路径到达终点,则为该数组返回 -1。 让我们看一些例子来理解这个问题。 输入: 数组 = [1, 2, 6, 8, 6, 3, 6, 0, 1, 2, 9] 输出 3 (1--> 2 --> 8 --> 9) 解释: 我们将从第 0 个索引开始。第 0 个索引处的整数是 1,因此我们最多可以跳到第 1 个索引。接下来,从第 1 个索引,我们可以向前跳 2 个索引。因此,我们将到达索引 3。从索引 3,我们可以向前跳 8 步。因为 8 + 3 = 11,这等于数组的长度。因此,从索引 3,我们将跳到数组的最后一个索引之外。我们跳了 3 次到达终点。所以答案是 3。 输入: 数组 = [1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1] 输出 5 解释: 我们将应用与上面示例相同的逻辑。我们将从第 0 个索引跳到第 1 个索引,然后跳到第 2 个索引。从第 2 个索引向前,我们将跳 2 个索引,到达第 4 个、然后是第 6 个、然后是第 8 个,最后是第 10 个索引。到达最后一个索引所需的总跳跃次数为 10。 方法 - 1在第一种方法中,我们将使用递归来解决问题。 我们首先创建一个递归函数。我们将递归地为从当前元素可以到达的所有索引调用该函数。我们可以计算出数组中的所有可能路径,并找到最短路径或跳跃次数最少的路径。 我们将按照以下步骤解决此问题。
下面是上面算法的 Python 程序。 代码 输出 The minimum jumps required to reach the end of the array is: 3 时间复杂度: 从任何给定索引向前移动最多有 n 种可能的方式。因此,到达终点所需的最大步数为 nn。所以时间复杂度是 O(n * Nn)。 空间复杂度: 我们需要 O(n) 的内存来存储递归栈。 方法 - 2在第二种方法中,我们将使用动态规划。一些重叠的条件会花费额外的时间;因此,使用动态规划将是有效的。 让我们通过一个例子来理解。让我们取数组 = [1, 2, 1, 8, 6, 3, 6, 0, 1, 2, 9]。递归函数 minNoJumps(3, 10) 将被调用两次,因为一个人可以从索引 1 和 2 到达 8。因此,这是一个重叠的子问题。我们可以使用动态规划解决方案来避免这种重叠的子问题。 我们将按照以下步骤解决问题
下面是上述方法的 Python 代码。 代码 输出 The minimum jumps required to reach the end of the array is: 3 时间复杂度: 此方法的实际时间复杂度比前一种方法大大降低。复杂度降低是因为我们不需要多次运行各种子问题。由于有两个嵌套循环,因此时间复杂度是非线性的;因此,它是 O(n2)。 空间复杂度: 我们正在存储长度为 n 的 dp 数组,这将在内存中占用线性空间。因此,此方法的空间复杂度为 O(n)。 方法 - 3这种方法是我们上面看到的动态规划方法的变体。 我们将再次创建一个数组 dp = []。然而,这次 dp 的第 i 个索引将告诉从数组的第 i 个索引到达 (n - 1) 个索引所需的最小跳跃次数。因此,在程序结束时,我们将返回第一个索引的值,即数组 dp 的第 0 个索引。这种方法将告诉从第 0 个索引到达 (n - 1) 个索引所需的最小跳跃次数。 以下是此方法的 Python 代码。 代码 输出 The minimum jumps required to reach the end of the array is: 3 时间复杂度: 由于我们运行了嵌套循环,因此时间复杂度将是非线性的。因此,它是 O(n2)。 空间复杂度: 我们使用了额外的空间来存储 DP 数组。因此 空间复杂度为 O(n)。 方法 - 3我们将使用贪婪算法来解决这个问题。 下面是要遵循的步骤。
下面是实现贪婪算法方法的 Python 程序。 代码 输出 The minimum jumps required to reach the end of the array is: 3 时间复杂度: 我们执行了一个线性循环;因此时间复杂度将是线性的。O(n)。 空间复杂度: 我们没有使用任何额外的空间;因此,空间复杂度是常数,即 O(1)。 贪婪算法是所有方法中最好的,具有线性的时间和常数的空间复杂度。 下一个主题旋转矩阵 |
Boto3 是一个 Python 模块,允许开发人员以编程方式与亚马逊网络服务 (AWS) 资源进行交互。它提供了一个易于使用的 AWS 服务接口,使开发人员更容易构建与 AWS 服务交互的应用程序。使用 Boto3,开发人员可以在 AWS 上执行各种操作...
阅读 8 分钟
? 使用 Python 内置的 type() 方法,您可以确定变量的类型。type() 函数将变量的数据类型作为字符串返回。以下是使用 type() 函数的示例:x = 5 print(type(x)) 输出:<class 'int'> 在此示例中,我们创建了一个变量 x 并赋值...
阅读 3 分钟
Python IDE 和代码编辑器 您可以在本手册中找到许多适用于初学者和专家的 Python 集成开发环境和代码编辑器。用于编写和编辑代码的工具称为代码编辑器。它们通常是可移植的,并且对学习有益。使用 IDE 变得必要...
阅读 3 分钟
简介 在计算机科学中,不相交集(通常称为并查集数据结构)是一种有效的工具,用于维护对象集合并回答有关其连通性的查询。Python 中的并查集算法经常用于创建不相交集,在解决问题时非常有效...
阅读 4 分钟
scipy.stats.maxwell(),被称为第二类帕累托分布,定义了麦克斯韦连续随机变量。它是从通用方法继承的 rv_continuous 类的一个实例。它通过添加特定于此分布的细节来完善这些技术。scipy.stats.maxwell() 中包含的参数有:q:...
阅读 3 分钟
YouTube 是全球最大的视频分享平台,人们可以在其中上传和观看不同类别的视频。它已成为内容创作者与世界分享知识、技能和创造力的热门平台。随着内容创作者和观众数量的不断增加...
阅读 6 分钟
Sklearn 中的 Accuracy_Score 在数据科学工作流中,使用适当的度量标准来衡量模型的准确性是至关重要的一步。在本教程中,我们将学习两种计算源样本预测类别准确性的方法:手动计算和使用 Python 的 scikit-learn 库。以下是...
5 分钟阅读
简介:Python os 模块提供了一种与底层操作系统交互的平台无关方法。它提供了一系列用于处理文件、目录、进程和环境变量等内容的函数和常量。Expanduser():Python 中 os.path 模块的 expanduser() 函数会展开波浪号字符...
阅读 2 分钟
这是初学者的常见问题。面试中可能会问到。有时,开发人员还需要在单行中获取多个输入。在C/C++中,可以使用scanf()方法轻松完成。然而,Python提供了两种方法……
阅读 4 分钟
在本教程中,我们将解决排序数组中一个有趣的问题。但是有一个转折;给定的数组可能在某个索引位置旋转。这意味着排序数组中的少数元素可能在给定的位置旋转...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India