将所有球移动到每个盒子的最少操作次数
在这个问题中,我们需要计算将所有球从多个盒子中移动到每个盒子所需的最小操作次数。目标是为每个盒子计算移动球到该盒子的总操作次数。
boxes,其中每个字符是 '0' 或 '1':
'1' 表示该位置有一个球。'0' 表示该位置没有球。i 个元素表示将所有球移动到第 i 个盒子所需的操作次数。如果某个球在位置 j,要移动到位置 i,需要的操作次数是 |i - j|。
因此,对所有位置 j 有球的位置,我们需要将 |i - j| 累加。
输入:boxes = "110"
输出:[1, 1, 3]
解释:
输入:boxes = "001011"
输出:[11, 8, 5, 4, 3, 4]
为了解决问题,可以采用两种主要方法:暴力法和优化方法。
对每个位置 i,计算到所有球的距离总和。
def minOperations(boxes: str) -> list[int]:
n = len(boxes)
result = []
for i in range(n):
total_moves = 0
for j in range(n):
if boxes[j] == '1':
total_moves += abs(i - j)
result.append(total_moves)
return result
通过一次从左到右和一次从右到左的扫描,减少重复计算。
def minOperations(boxes: str) -> list[int]:
n = len(boxes)
result = [0] * n
count = 0
ops = 0
# 从左到右计算
for i in range(n):
result[i] += ops
count += int(boxes[i])
ops += count
count = 0
ops = 0
# 从右到左计算
for i in range(n - 1, -1, -1):
result[i] += ops
count += int(boxes[i])
ops += count
return result
输入: boxes = "110"
从左到右:
result = [0, 0, 0]count=1, ops=1, 更新 result=[0, 1, 0]count=2, ops=3, 更新 result=[0, 1, 3]从右到左:
result = [0, 1, 3]count=0, ops=0, 更新 result=[0, 1, 3]count=1, ops=1, 更新 result=[0, 1, 1]count=2, ops=3, 更新 result=[1, 1, 3]输出: [1, 1, 3]
2025 年陆剧市场依旧热度爆棚
时间:2025-09-19
阵地央一首播:年度高品质大剧,深度解锁文化抗战三重非凡意义
时间:2025-09-18
陈展鹏刘佩玥《巨塔之后》今首播
时间:2025-08-28
生万物大结局惊现最招恨角色,原来真正的坏都披着善的“羊皮”!
时间:2025-08-28
归队6集燃爆:袁姗姗化身“战地玫瑰”,实战军医双在线超吸睛!
时间:2025-08-28
许凯田曦薇新剧《子夜归》首播,点击率位列第七
时间:2025-08-21