【发布时间】:2021-12-27 21:26:37
【问题描述】:
我最近在一家公司面试(以 M 开头,以 A 结尾)问了我这个问题。还在练习我的算法,所以我希望有人能帮助我理解如何解决这个问题,以及这些类型的问题。
问题:
给你 2 个数组。例如:
D = [10,7,13,12,4]
R = [5,12,7,10,12]
D表示城市A到城市B的航班出发价格。 R 表示从城市B 到城市A 的航班返回价格。查找城市A 和城市B 之间往返航班的最低费用。例如,示例中的最小值为D[1] + R[2]。
(只能乘坐与出发航班相同或更高索引的回程航班)
棘手的部分是,很明显,你必须在返回之前离开。
天真的方法只是结合了所有可能性的双 for 循环。但是,我知道有更好的方法,但我无法绕过它。我相信我们想要创建某种临时数组,目前为止的最小值或类似的东西......
感谢阅读。
【问题讨论】:
-
查找图表和最短路径算法
-
谢谢。我最初的想法也是图表,但面试官实际上告诉我这不是图表问题。
-
这是否意味着如果您乘坐
D[i]航班,您可以使用回程航班R[i]及以上或R[i+1]及以上? -
没错。可以访问R[i],以及所有的R[i+1...i+2...i+n]
-
这是一个棘手的问题,我也花了一些时间来理解它。唯一的限制是,如果您选择 D 中的索引 i,则无法访问 R 中的 i-k。您只能访问 R 中的 i...i+k。(因为您不能在离开前返回)。允许当天返回。