我用一排蹦床进行编码练习,每个蹦床都有最小和最大“弹力”。我有起始蹦床和结束蹦床的索引,有了这个,我需要找到从起始蹦床到达结束蹦床所需的最小跳跃量。
我尝试创建一个邻接列表,其中列出了所有可能的蹦床跳跃。这很好,直到我到达大量蹦床为止。问题是它需要 O(n^2) 时间。这就是我创建邻接列表的方式:
def createAL (a, b, l):
al = [list() for _ in range(l)]
for i in range(l):
for j in range(a[i], b[i]+1):
if (i+j) <= l-1:
al[i].append(i+j)
if (i-j) >= 0:
al[i].append(i-j)
for i in range(len(al)):
al[i] = list(set(al[i]))
return al
“a”是最小值。弹性,“b”最大弹性,“l”是两个列表的长度。
如您所见,问题是我有 2 个嵌套循环。有谁知道更有效的方法吗?(最好没有循环)
蛊毒传说
相关分类