Java Program to Find the Earliest Time When a Frog Can Jump to The Other Side of a River

2025年3月26日 | 阅读 3 分钟

一只小青蛙有一个越过河流的任务。它最初位于一岸的 0 号位置,想要到达对岸的 X+1 号位置。河流表面会随着时间在不同位置落下树叶。

更具体地说,你有一个数组 A,其中每个元素表示一片叶子落入河流的时刻。目标是找出青蛙能够成功跳到河对岸的最早时刻。

青蛙需要有从 1 到 X 的所有位置都有叶子才能过河。水流速度可忽略不计,这意味着叶子一旦落下就不会移动。

示例

考虑 X=5 的情况,落叶数组 A 为

A=[1,3,1,4,2,3,5,4]

在这个例子中,在第 6 秒,一片叶子落在了 5 号位置,这使得从 1 到 5 的所有位置都得到了覆盖。因此,青蛙最早可以跳到对岸的时间是 6 秒。

算法

步骤 1: 创建一个空的 HashSet,命名为 positions,用于跟踪河流上必需的叶子位置。

步骤 2: 将从 1 到 X(含)的所有 整数 添加到 positions HashSet 中。这些代表需要被落叶覆盖的位置。

步骤 3: 遍历数组 A 中的每个元素,该元素表示叶子随时间落下的位置。如果该位置存在于 positions HashSet 中,则将其移除。

步骤 4: 每次移除后,检查 positions HashSet 是否为空。如果为空,则返回当前时间索引(time),表示所有必需的位置都已覆盖。

步骤 5: 如果 循环 完成后 positions HashSet 仍然不为空,则返回 -1,表示在数组结束时并非所有位置都被覆盖。

让我们在 Java 程序中实现上述步骤。

文件名: FrogJump.java

输出

 
The earliest time the frog can jump is: 6