降低给定函数的时间复杂度[关闭]

问题描述 投票:0回答:1

我试图降低以下函数的时间复杂度,但无法做到。 整数数组也可以有负数。

def solve(n, ar):
    max_sum_ending_here = 0  
    max_sum_so_far = 0       

    for end_index in range(n):
        for start_index in range(0, end_index + 1):
            max_sum_ending_here += ar[start_index]
            max_sum_so_far = max(max_sum_so_far, max_sum_ending_here)

    return max_sum_so_far

欢迎任何建议。

python python-3.x
1个回答
0
投票

您似乎正在尝试使用嵌套循环查找最大子数组总和,这会导致时间复杂度为 O(n^2),其中 n 是数组的大小。您可以使用 Kadane 算法将时间复杂度降低到 O(n)。方法如下:

def solve(n, ar):
    max_sum_ending_here = ar[0]  
    max_sum_so_far = ar[0]       

    for i in range(1, n):
        max_sum_ending_here = max(ar[i], max_sum_ending_here + ar[i])
        max_sum_so_far = max(max_sum_so_far, max_sum_ending_here)

    return max_sum_so_far

此版本迭代数组一次,维护两个变量:

max_sum_ending_here
跟踪以当前索引结尾的最大子数组总和,以及
max_sum_so_far
跟踪迄今为止看到的最大子数组总和。该算法的时间复杂度为 O(n),效率更高。

© www.soinside.com 2019 - 2024. All rights reserved.