计算从位置 x 到 y 的最少步数 | 豆包MarsCode AI刷题

55 阅读1分钟

步长和步数的递增

  1. 步长从 1 开始:因为首步必须为 1,代码从步长 1 开始,并在每次迭代中递增步长(step_size += 1)。
  2. 距离减少策略:每次迭代中,用当前步长连续移动两步(即减少 2 * step_size 距离),这样可以更快地减少到目标位置的距离。这个策略的原因在于:用较大的步长可以更快地消耗掉距离,使得到达目标所需的总步数减少。
  3. 循环终止条件:每次迭代时检查剩余的 distance 是否已经小于或等于当前步长 step_size,如果满足,则可以用当前步长走一次就能到达目标。

整个过程的解释

通过逐步增加步长,我们可以在每一步时都尽可能多地减少剩余的距离。因为每一步的步长增加 1,可以以一种“稳步逼近”的方式使得最终步数最小化。

示例:代码如何求解

假设从 x = 12 移动到 y = 6,则 distance = |12 - 6| = 6

  • 初始步长step_size = 1

  • 迭代过程

    • 第一步:距离为 6,大于步长 1,因此采取两个步长 1 的移动,剩余距离 6 - 2 * 1 = 4。步数 steps = 2
    • 第二步:步长增大到 2,距离仍大于步长,因此采取两个步长 2 的移动,剩余距离 4 - 2 * 2 = 0。步数 steps = 4

因为剩余距离为 0,已经到达目标,因此总步数为 4。