移动所有球到每个盒子所需的最小操作数
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