【发布时间】:2021-12-30 04:16:12
【问题描述】:
寻求一些帮助来解决看似简单的算法。
简要概述: 我们有一个未排序的整数列表。目标是找出该列表中的每个元素与最近的“0”值的距离。
如果我们有一个类似这样的列表:[0, 1, 2, 0, 4, 5, 6, 7, 0, 5, 6, 9]
预期结果将是:[0, 1, 1, 0, 1, 2, 2, 1, 0, 1, 2, 3]
我试图简化问题以提出一些简单的算法,但我不知道如何跟踪前一个和下一个零值。 我最初的想法是找出列表中零的所有索引,并用值填补这些零之间的空白,但这显然对我来说不太奏效。
执行不佳的代码(到目前为止,我只是将步骤倒数到下一个零):
def get_empty_lot_index(arr: list) -> list:
''' Gets all indices of empty lots '''
lots = []
for i in range(len(arr)):
if arr[i] == 0:
lots.append(i)
return lots
def space_to_empty_lots(arr: list) -> list:
empty_lots = get_empty_lot_index(arr)
new_arr = []
start = 0
for i in empty_lots:
steps = i - start
while steps >= 0:
new_arr.append(steps)
steps -= 1
start = i + 1
return new_arr
【问题讨论】: