超级洗衣机 问题描述:假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。 在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。 要求:给定一个非负整数数组代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的最少的操作步数。如果不能使每台洗衣机中衣物的数量相等,则返回 -1。 提示: n 的范围是 [1, 10000]。 在每台超级洗衣机中,衣物数量的范围是 [0, 1e5]。 示例1: 输入: [1,0,5] 输出: 3。用Python打出代码。
时间: 2023-06-24 12:03:57 浏览: 85
思路: 首先计算出所有洗衣机中衣服的总数,若总数不能被洗衣机的数量整除,则无法使每台洗衣机中衣服数量相等,返回 -1。否则,计算出每台洗衣机中应该有的衣服数量,然后依次计算每台洗衣机需要移动的衣服数量,取最大值即为最少的操作步数。代码如下:
```python
class Solution:
def findMinMoves(self, machines: List[int]) -> int:
total = sum(machines)
n = len(machines)
if total % n != 0:
return -1
avg = total // n
res, cnt = 0, 0
for i in range(n):
cnt += machines[i] - avg
res = max(res, abs(cnt), machines[i] - avg)
return res
```
其中,cnt 表示当前洗衣机中衣服数量与平均值之间的差值累加和,res 记录最少的操作步数。
阅读全文