在 Python 中查找环形大小为 N 的环中任意整数点到 A 和 B 的最小距离和


假设我们有一个环,它由 1 到 N 的一些数字组成。我们还有两个数字 A 和 B。现在,我们可以站在任何位置(比如 x)并执行关于总距离和(比如 Z = 从 X 到 A 的距离 + 从 X 到 B 的距离)的计数操作。我们必须选择 X 使得 Z 最小化。最后返回 Z 的值。我们必须记住,X 不会与 A 和 B 相同。

因此,如果输入类似于 N = 30,A = 10,B = 20,则输出将为 10,因为通过选择 X = 15,从 X 到 A 的距离为 5,从 X 到 B 的距离为 5。所以,总距离 = 5 + 5 = 10。

为了解决这个问题,我们将遵循以下步骤:

  • 如果 a > b 不为零,则

    • 交换 a 和 b

  • 顺时针距离 := b - a

  • 逆时针距离 := (a - 1) + (n - b + 1)

  • 最小距离 := 顺时针距离和逆时针距离中的最小值

  • 如果最小距离与 1 相同,则

    • 返回 3

  • 返回最小距离

示例

让我们看看以下实现以获得更好的理解:

现场演示

def get_min_z(n, a, b):
   if (a > b):
      a, b = b, a
   clock_wise_dist = b - a
   counter_clock_wise_dist = (a - 1) + (n - b + 1)
   minimum_dist = min(clock_wise_dist, counter_clock_wise_dist)
   if (minimum_dist == 1):
      return 3
   return minimum_dist
n = 30
a = 10
b = 20
print(get_min_z(n, a, b))

输入

30, 10, 20

输出

10

更新于: 2020年8月20日

88 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.