【发布时间】:2019-12-04 08:32:01
【问题描述】:
输入:
listi = [9, 7, 8, 4, 6, 1, 3, 2, 5]
输出:
# m=3
listo = [9, 8, 8, 6, 6, 3, 5]
给定一个由n 数字组成的随机列表,我需要找到m 后续元素的所有子列表,从子列表中选择最大值并将它们放入一个新列表中。
def convert(listi, m):
listo = []
n = len(listi)
for i in range(n-m+1):
listo.append(max(listi[i:3+i]))
return listo
这个实现的时间复杂度是O(m\^{(n-m+1)},如果listi很长的话就很糟糕了,有没有办法在O(n)的复杂度中实现这个?
【问题讨论】:
-
我认为你可以,稍微牺牲一下空间复杂度——这应该不是问题。我会试一试。顺便问一下,
O(m\^{(n-m+1)}是什么?你能编辑一下吗? -
为什么8和6在结果列表中出现了两次?
-
@John - 因为 7-8-4 和 8-4-6 的最大值均为 8。类似地,4-6-1 和 6-1-3 的最大值为 6。
-
啊——我没有将“连续”解释为“在列表中相邻”。
标签: python algorithm list time-complexity dynamic-programming