查找访问所有加油站的第一个循环行程17 Mar 2025 | 4 分钟阅读 给定一个加油站数组,其中数组的每个元素代表一个加油站。每个加油站有两个属性: 汽油:加油站可以提供的汽油量。 距离:到下一个加油站的距离。 任务是找到一个加油站,从那里开始可以进行一个环形旅程,并能完成整个旅程,以便你可以穿过每个加油站并返回起点。每个加油站提供一定量的汽油,而连续加油站之间的距离会消耗一些汽油。 让我们来实现它的代码 代码 输出 ![]() 说明 结构定义 该代码定义了一个 PetrolPump 结构,包含两个属性:petrol 和 distance。数组中的每个元素都代表一个具有这些属性的加油站。 函数 findStartingPoint 该函数接受加油站数组 (arr) 和加油站数量 (n) 作为输入参数。 它实现了查找环形旅程起点的算法。 初始化 start 和 end 初始化为 0 和 1,分别表示旅程中当前的起始加油站和结束加油站。 curr_petrol 初始化为起始加油站的汽油量减去距离。 主循环 代码使用一个 while 循环,该循环一直持续到找到合适的起点(当 end 等于 start 且 curr_petrol 非负时)。 检查并更新当前汽油量 如果 curr_petrol 变为负数,则表示当前的起点不合适。 代码进入一个嵌套的 while 循环以查找新的起点 (start)。 它减去从移除的加油站到下一个加油站所消耗的汽油,并递增 start。 此循环一直持续到找到一个有效的起点或检查完所有加油站。 移动到下一个加油站 代码以循环方式将 end 更新到下一个加油站。 更新当前汽油量 通过添加当前加油站提供的汽油量并减去到下一个加油站的距离来更新 curr_petrol。 返回起点 如果找到合适的起点,则函数返回该加油站的索引作为起点。 如果在遍历所有加油站后仍未找到合适的起点,则返回 -1。 主函数 main 函数用于创建演示用的加油站数组 (arr)。 使用此数组调用 findStartingPoint 函数,并将结果存储在 start 变量中。 输出 如果找到了起点 (start != -1),则打印出可以开始环形旅程的加油站的索引。 如果没有解决方案(start == -1),则打印一条消息,表明没有找到合适的起点。 让我们讨论时间和空间复杂度 时间复杂度 代码的时间复杂度为 O(N),其中 N 是加油站的数量。 说明 主循环一直运行直到找到合适的起点,最多迭代每个加油站两次(一次用于 start,一次用于 end)。 每次循环迭代都涉及常数时间的操作(算术、比较和更新)。 嵌套的 while 循环在最坏情况下会迭代所有加油站一次,这为时间复杂度贡献了 O(N)。 因此,总时间复杂度为 O(N)。 空间复杂度 代码的空间复杂度为 O(1),即常数空间。 解释:代码使用的额外空间量是恒定的,与输入大小无关。 使用的变量只有 start、end、curr_petrol 和循环控制变量。 没有创建任何依赖于输入大小的额外数据结构或数组。 因此,总空间复杂度为 O(1)。 下一个主题根据士兵军衔查找已完成的任务 |
树是一种常见的非线性数据结构。与数组、栈、队列和链表等线性数据结构不同,树表示层次结构。树的排序信息无关紧要。它由两个指针和节点组成...
阅读 4 分钟
在矩阵或网格中改变两个单元格之间最短距离的问题是一个经典的算法挑战,涉及机器人技术、导航系统和计算机游戏等各种领域。给定一个矩阵或网格,其中每个单元格可能代表不同的状态或...
阅读9分钟
对数组进行排序是计算机科学和编程中的一项常见任务。通常,要求是简单地将数组按升序或降序排序。但是,有时需要更复杂的排列。其中一种排列是将数组元素按波浪形排序——交替……
阅读 6 分钟
斐波那契数列是一个很酷的数学概念,你从 0 和 1 开始,每个数字都是前两个数字的和。它是由这位古老的意大利人斐波那契在中世纪发明的。他意识到兔子种群的增长……
7 分钟阅读
给定二叉树,找出所有根到叶子路径中不同的节点的最大数量。示例输入:1 / \ 2...
阅读 2 分钟
简介从给定节点开始燃烧二叉树是计算机科学中一个迷人的问题,经常在算法面试和编程竞赛中遇到。这项任务包括从给定的节点开始,在整个二叉树中模拟火势蔓延,并确定它...
阅读 4 分钟
布谷鸟过滤器是一种节省空间的概率性数据结构,用于测试一个元素是否属于一个集合。它由 Burton Howard Bloom 于 1970 年构思。与其他数据结构相比,布谷鸟过滤器的主要优势在于其出色的...
阅读 6 分钟
问题陈述 如果一个正整数满足两个标准,则认为它是“美观”的:数字中的偶数位数等于奇数位数。该数字可被给定的整数 k 整除。我们的任务是计算并返回美观数字的总数...
阅读 10 分钟
引言:计算机科学中的基本数据结构,链表用于广泛的任务,从设计动态数据结构到解决具有挑战性的问题。与加法和乘法在链表上下文中研究的频率相比,减法研究得较少。另一方面,...
5 分钟阅读
在本文中,我们将探讨如何在 Python 中实现字符串的左旋和右旋。分步算法和代码示例演示了向任一方向旋转字符串的机制。我们还将讨论字符串旋转有用的用例和应用。线性……
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India