描述
You have n boxes. You are given a binary string boxes of length n, where boxes[i] is '0' if the ith box is empty, and '1' if it contains one ball.
In one operation, you can move one ball from a box to an adjacent box. Box i is adjacent to box j if abs(i - j) == 1. Note that after doing so, there may be more than one ball in some boxes.
Return an array answer of size n, where answer[i] is the minimum number of operations needed to move all the balls to the ith box.
Each answer[i] is calculated considering the initial state of the boxes.
Example 1:
Input: boxes = "110"
Output: [1,1,3]
Explanation: The answer for each box is as follows:
1) First box: you will have to move one ball from the second box to the first box in one operation.
2) Second box: you will have to move one ball from the first box to the second box in one operation.
3) Third box: you will have to move one ball from the first box to the third box in two operations, and move one ball from the second box to the third box in one operation.
Example 2:
Input: boxes = "001011"
Output: [11,8,5,4,3,4]
Note:
n == boxes.length
1 <= n <= 2000
boxes[i] is either '0' or '1'.
解析
根据题意,只需要先找出 boxes 中为 1 的索引数组 idx ,然后遍历 boxes 的时候,计算其他有球的位置索引到当前位置索引的绝对值差的总和追加到 r 中,遍历结束返回 r 即可。
解答
class Solution(object):
def minOperations(self, boxes):
"""
:type boxes: str
:rtype: List[int]
"""
r = []
idx = [i for i in range(len(boxes)) if boxes[i] == "1"]
for i in range(len(boxes)):
tmp = 0
for j in idx:
if i!=j:
tmp += abs(i-j)
r.append(tmp)
return r
运行结果
Runtime: 2384 ms, faster than 50.00% of Python online submissions for Minimum Number of Operations to Move All Balls to Each Box.
Memory Usage: 13.9 MB, less than 50.00% of Python online submissions for Minimum Number of Operations to Move All Balls to Each Box.
原题链接:leetcode.com/problems/mi…
您的支持是我最大的动力