在 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]