程序:Python中查找列表,显示所有球移动到当前位置所需的总距离

程序:Python中查找列表,显示所有球移动到当前位置所需的总距离

假设我们有一个二进制列表称为 nums,其中只包含0和1,其中0表示空单元格,1表示单元格由球填充。我们必须找到一个新列表 L,其大小与 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移动到距离为2的位置1。

为了解决这个问题,我们将遵循以下步骤−

  • 如果 nums 为空,则
    • 返回新列表
  • 将 left_count 设置为 0
  • 将 right_count 设置为 0
  • 将 left_sum 设置为 0
  • 将 right_sum 设置为 0
  • 将 result 设置为新列表
  • 对于 nums 中的每个索引和值 num,执行以下操作:
    • 如果 num 是非零的,则
      • right_count 增加1
      • right_sum 加上索引
  • 对于 nums 中的每个索引和值 num,执行以下操作:
    • 在 result 的末尾插入 (left_sum + right_sum)
    • 如果 num 是非零的,则
      • right_count减少1
      • left_count增加1
    • left_sum增加left_count
    • right_sum减少right_count
  • 返回 result

例子

更好地理解以下实现方法−

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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程