移动所有球到每个盒子所需的最小操作数


Submit solution

Points: 300
Time limit: 1.0s
Memory limit: 4M

Author:
Problem type
Allowed languages
C, C++

leetcode 1769

有 \(n\) 个盒子排成一排,每个盒子可能有一个球或者没有。用一个长度为 \(n\) 的 二进制字符串 boxes 来表示这些盒子:
如果 boxes[i] == '1',表示第 i 个盒子里有一个球;
如果 boxes[i] == '0',表示第 i 个盒子是空的。
在每次操作中,可以选择一个球并将它移动到与之相邻的盒子中(即从位置 i 移动到 i + 1 或 i - 1)。
返回一个长度为 n 的数组 answer,其中 answer[i] 表示将所有球都移动到第 i 个盒子所需的 最小操作数(不一定一次移动一个球,可以分别移动多个球)。

第一行输入整数 \(n\) ,表示有\(n\)个盒子
第二行输入一个字符串,字符串长度为\(n\)

输出\(n\)个整数,空格隔开。\(ans_{i}\)表示把所有球移动到 第 \(i\) 个盒子所需要的最小移动次数

示例 1:

输入:

3
110

输出:

1 1 3
解释:

将所有球移到第 0 个盒子:球从位置 1 移到 0,共需 1 步。总共 1 步。
将所有球移到第 1 个盒子:第 0 个球不动,第 2 个球移动 1 步。总共 1 步。
将所有球移到第 2 个盒子:球从位置 0 移到 2 需要 2 步,球从位置 1 移到 2 需要 1 步。总共 3 步。

示例 2:

输入:

6
001011

输出:

11 8 5 4 3 4
提示:

\(n == boxes.length\)
\(1 \le n \le 10^5\)
boxes[i] 为 '0' 或 '1'


Comments

There are no comments at the moment.