Python数组中范围的最大总和

时间:2013-11-21 17:19:18

标签: python arrays sum

尝试创建一个函数,其中数组a作为参数传递,返回的是一对索引x,y,使得最大总和为sum(a [x:y])。

例如,假设我有数组[4, -2, -3, 7, 3, -1]。该函数将接受此数组并吐出(3,4),因为从索引3到索引4的数字序列是您可以在此数组中创建的最大序列。 10是你在这个数组中找到的最大数字,可以将任何序列加在一起。

这是我到目前为止所使用的代码,它或多或少都有效,但对于数组而言它需要永远。 10000的长度。有什么建议吗?

def bentley(a):
    max = 0
    indices = 0,0
    for x in range(len(a)):
        for y in range(len(a)):
            if sum(a[x:y]) > max:
                max = sum(a[x:y])
                indices = x,y
    return indices

2 个答案:

答案 0 :(得分:4)

http://en.wikipedia.org/wiki/Maximum_subarray_problem

来自维基百科:

Kadane的算法,O(n)

def max_subarray(A):
    max_ending_here = max_so_far = 0
    for x in A:
        max_ending_here = max(0, max_ending_here + x)
        max_so_far = max(max_so_far, max_ending_here)

    if max_so_far > 0:
        return max_so_far
    else:
        return max(A)

Alternate Divide and conquer O(nlogn):

http://penguin.ewu.edu/~bojianxu/courses/cscd320/slides_dc_2.pdf

答案 1 :(得分:1)

这是一个美味的成语沙拉:

def bentley(a):
    return max((sum(a[x:y+1]), x, y) 
                for x, _ in enumerate(a) for y, _ in enumerate(a))[1:]