从 O(n^2) 到 O(n) 的最大减少列表
biggest decrease list from O(n^2) to O(n)
我的程序复杂度为 O(n^2)。我想要复杂度为 O(n) 的程序图。我怎样才能做到这一点?
我的程序背后的想法是,与该元素之后的元素相比,我希望列表中某个元素的减少量最大。
因此,例如列表 [4,7,5,8,4,3] 将元素 4 与 7,5,8,4,3 进行比较,并将元素 8 与 4,3 进行比较。解决方案是; 8-3 = 5(最大跌幅)。
def grootste_daling(temperaturen):
afname = []
for i in range(len(temperaturen)):
for j in range(i + 1, len(temperaturen),1):
if temperaturen[i] - temperaturen[j] > 0:
afname.append(temperaturen[i] - temperaturen[j])
return max(afname) if afname else 0
是的,这在线性时间内是可以解决的。您只需要跟踪目前看到的最大元素:
maximum = 0
max_decrease = 0
for current in temperatures:
if current > maximum:
maximum = current
if maximum - current > max_decrease:
max_decrease = maximum - current
(0的初始值假定列表的值为正并且实际会减少。否则可能需要对变量进行不同的初始化。)
我的程序复杂度为 O(n^2)。我想要复杂度为 O(n) 的程序图。我怎样才能做到这一点?
我的程序背后的想法是,与该元素之后的元素相比,我希望列表中某个元素的减少量最大。
因此,例如列表 [4,7,5,8,4,3] 将元素 4 与 7,5,8,4,3 进行比较,并将元素 8 与 4,3 进行比较。解决方案是; 8-3 = 5(最大跌幅)。
def grootste_daling(temperaturen):
afname = []
for i in range(len(temperaturen)):
for j in range(i + 1, len(temperaturen),1):
if temperaturen[i] - temperaturen[j] > 0:
afname.append(temperaturen[i] - temperaturen[j])
return max(afname) if afname else 0
是的,这在线性时间内是可以解决的。您只需要跟踪目前看到的最大元素:
maximum = 0
max_decrease = 0
for current in temperatures:
if current > maximum:
maximum = current
if maximum - current > max_decrease:
max_decrease = maximum - current
(0的初始值假定列表的值为正并且实际会减少。否则可能需要对变量进行不同的初始化。)