Minimum Speed to Arrive on Time problem in Java

2025年3月27日 | 阅读 4 分钟

这是 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常被问到的问题。为了解决这个问题,我们需要检查面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将通过不同的方法和逻辑来解决准时到达最低速度问题。此外,我们还将创建Java程序来实现。

问题陈述

给你一个名为 dist 的数组,其中 dist[i] 的值表示你必须按顺序完成的第 i 段旅程的距离。此外,你还会得到一个每小时的浮点数,表示你完成旅程的剩余时间。你必须确定能让你在规定时间内完成旅程的最低整数速度(以英里/小时为单位)。如果无法在规定时间内完成旅程,则返回 -1。

约束

  • dist 的每个元素都是表示英里的正整数。
  • 总时间 hour 是一个正浮点数。
  • 速度必须是大于 0 的整数。

示例

输入:dist = [1 , 3, 2], hour = 2.7

输出 3

解释

以每小时三英里的速度,第一段需要一个半小时,而最后一段需要两个半小时。总时长等于或小于 2.7 小时。

解决问题的方法

我们需要找到允许我们在给定时间 hour 内完成旅程的最低速度。

  1. 理解时间计算
    • 对于每一段,所需时间是 距离/速度。
    • 总旅行时间是每段所需时间的总和。
    • 对于除最后一段外的所有段,时间必须向上舍入到最接近的整数(因为你不能在段中途改变速度)。
  2. 速度上的二分查找
    • 由于我们要寻找最低速度,我们可以有效地利用二分查找来找到这个速度。
    • 对于二分查找,下界 (low) 是 1(因为速度必须大于 0),上界 (high) 可以是一个很大的数字。在实际问题中,我们可以假设一个合理的大上界,例如 10^7,因为速度限制通常不会过高。
  3. 二分查找算法
    • 当 low <= high 时,计算 mid = (low + high) / 2。
    • 检查是否可以在给定时间 hour 内以速度 mid 完成旅程。
    • 如果可能,则尝试更低的速度(high = mid - 1),以查看是否有更小的有效速度。
    • 如果不可能,则增加速度(low = mid + 1)。
  4. 检查速度的可行性
    • 编写一个辅助函数来计算给定速度下的总时间,并检查它是否小于或等于一小时。

文件名:MinimumSpeedToArriveOnTime.java

输出

 
3   

结论

准时到达最低速度问题可以使用二分查找高效地解决。二分查找的复杂度为 O(log(maxSpeed) * n),其中 maxSpeed 是假设的速度上限,n 是路段的数量。对于问题约束,这种方法是最佳的,确保了正确性和效率。