python - 从 O(n^2) 到 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 假设列表的值为正并且实际会减少。否则可能需要对变量进行不同的初始化。)
推荐阅读
- c# - 如何使用 timer_tick 定期播放声音?
- java - 将双引号“”连接到 URL 时出现 URISyntaxException
- spring - 使用 Spring Boot 自动查找 Thymeleaf 模板
- c++ - 使用带有 Power bi 的自定义 odbc 驱动程序
- django - Nginx 配置已经存在/文件丢失
- java - 如何在电子商务网站的后端存储图像?
- mongodb - MongoDB Aggregate - 如何让两个“$lookup”操作工作?
- jquery - .$ajax 在 SpringBoot SELECT 中不起作用。可以得到任何解决方案吗?
- python - 如何在我的 df 分析中显示策略
- javascript - 如何将网站上的元素与给定变量进行比较,并在 if 语句 *THAT WORKS* 中使用它?