在 Python 中找到将所有球移动到每个盒子的最少操作次数的程序

假设我们有一个名为 box 的二进制字符串,其中 box[i] 是 '0' 表示第 i 个盒子是空的,而 '1' 表示它包含一个球。现在,在一次操作中,我们可以将一个球从一个盒子移动到一个相邻的盒子。这样做之后,有些盒子里可能会有不止一个球。我们必须找到一个大小为 n 的数组 answer,其中 answer[i] 是将所有球移动到第 i 个盒子所需的最少操作次数。

因此,如果输入类似于 box = "1101",那么输出将是 [4, 3, 4, 5]

  • 要将所有球放在第一个盒子上,我们必须通过一次操作从 box2 中取出并通过三个操作从最后一个球中取出,因此总共需要进行 4 次操作。

  • 要将所有球放在第二个盒子上,我们必须通过一次操作从 box1 中取出,通过两次操作从最后一个球中取出,因此总共需要进行 3 次操作。

  • 要将所有球放在第三个盒子上,我们必须从 box2 和 last 各取一个操作,从 box1 取两个操作,所以总共 4 个操作。

  • 要将所有球放在最后一个盒子上,我们必须通过三个操作从 box1 中取出,通过两个操作从 box2 中取出,所以总共有 5 个操作。

示例

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

def solve(boxes):
   left = 0
   right = 0

   dist = 0
   for i in range(len(boxes)):
      if boxes[i] == "1":
         dist += i
         if i == 0:
            left += 1
         else:
            right += 1
   arr = [dist]
   for i in range(1, len(boxes)):
      arr.append(arr[i-1] + left - right)
      if boxes[i] == "1":
         left += 1
         right -= 1
   return arr

boxes = "1101"
print(solve(boxes))

输入

"1101"
输出结果
[4, 3, 4, 5]

猜你喜欢