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

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

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

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

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

球可以放在一个包含12个桶的数组中的给定位置。三个球可以放置在位置4、8和12,并且它们之间的力量将为4。这个值不能进一步增加。

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

  • 定义一个函数ball_count(),这将需要d
    • 和:= 1

    • curr = pos[0]

    • 对于i在range 1到n范围内,请执行以下操作

      • 如果pos[i] – curr >= d,则

      • ans = ans + 1

      • curr = pos[i]

    • 返回答案

  • n = pos大小

  • 对列表pos进行排序

  • left = 0

  • right = pos[-1] – pos[0]

  • 当left < right时,执行以下操作

    • mid = right – floor value of((right – left) / 2)

    • 如果ball_count(mid) >= x,则

      • left = mid
    • 否则,
      • right = mid – 1
  • 返回left

示例

让我们看一下以下实现,以便更好地理解−

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程