在 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]