在 Python 中查找显示将所有球移动到当前位置所需的总距离的列表的程序
假设我们有一个名为nums的二进制列表,它只包含0和1,其中0表示空单元格,1表示单元格被球填充。我们必须找到一个新的sayL列表,其大小也与nums大小相同,其中L[i]设置为将所有球移动到L[i]所需的总距离。这里将球从索引j移动到索引i的距离是|j-i|。
因此,如果输入类似于nums=[1,1,0,1],那么输出将是[4,3,4,5],因为
L[0]=|0-0|+|1-0|+|3-0|
L[1]=|0-1|+|1-1|+|3-1|
L[2]=|0-2|+|1-2|+|3-2|
L[3]=|0-3|+|1-3|+|3-3|
因此,要将所有球移动到L[1],我们必须将球从索引0移动到1,距离为1,并将球从索引3移动到1,距离为2。
示例
让我们看看以下实现以获得更好的理解-
def solve(nums):
if not nums:
return []
left_count = right_count = 0
left_sum = right_sum = 0
result = []
for index, num in enumerate(nums):
if num:
right_count += 1
right_sum += index
for index, num in enumerate(nums):
result.append(left_sum + right_sum)
if num:
right_count -= 1
left_count += 1
left_sum += left_count
right_sum -= right_count
return result
nums = [1, 1, 0, 1]
print(solve(nums))输入
[1, 1, 0, 1]输出结果
[4, 3, 4, 5]