使用 Python 最大化桶中球之间的最小力的程序

假设我们有几个桶和 x 个球。如果将球放入桶中,其中会产生一种特殊的力,我们必须找到一种方法来最大化两个球之间的最小力。在位置 p 和 q 的桶中两个球之间的力是 |p - q|。给我们的输入是包含桶位置和球数 x 的数组。我们必须找出它们之间的最小力。

因此,如果输入类似于 pos = [2, 4, 6, 8, 10, 12], x = 3,那么输出将为 4。

可以将球放入 12 个桶的阵列中的给定位置。这三个球可以放在位置 4、8 和 12,它们之间的功率将为 4。这个值不能再增加。

示例

让我们看看以下实现以更好地理解 -

def solve(pos, x):
   n = len(pos)
   pos.sort()

   def ball_count(d):
      ans, curr = 1, pos[0]
      for i in range(1, n):
         if pos[i] - curr >= d:
            ans += 1
            curr = pos[i]
      return ans

   left, right = 0, pos[-1] - pos[0]
   while left < right:
      mid = right - (right - left) //2
      if ball_count(mid) >= x:
         left = mid
      else:
        right = mid - 1
   return left

print(solve([2, 4, 6, 8, 10, 12], 3))

输入

[2, 4, 6, 8, 10, 12], 3
输出结果
4