Kadane的算法,连续元素的最大总和

时间:2013-11-23 01:39:22

标签: python algorithm list indexing

如何跟踪最大连续和问题的起始索引?

index_pairs[]是最大连续的起始索引[0]和结束索引[1]。总和。

我总能找到最大连续的最后一个索引 求和,但我的起始索引index_pairs[0]将返回 如果在maxsum之后有一个更大的数字,则索引不正确。

我的思路:为了知道起始指数的总和,我必须知道 使用maxendinghere列表的整数从零添加iterable时。但是,什么时候 如果maxendinghere小于并且即使下一个连续也更新,则maxendinghere将始终为零 总和(可能不是最大的总和)正在总结中。


有没有办法找到我的最大连续求和指数的起始索引

from random import randrange
iterable = [randrange(-10,10) for r in xrange(100)]

def max_continuous_sequence(iterable):
    maxsum, maxendinghere = 0, 0
    index_pairs = [0,0]
    for i,x in enumerate(iterable):
        # summing next numbers
        maxendinghere += x
        if maxsum < maxendinghere:
            # found a higher sum
            maxsum = maxendinghere
            index_pairs[1] = i
        elif maxendinghere < 0:
            # resets the max here if next element is less than zero
            maxendinghere = 0
            # starts off the index at where we ended last
            index_pairs[0] = i+1
    return (index_pairs[0],index_pairs[1])

1 个答案:

答案 0 :(得分:1)

你可以颠倒元素的顺序,运行你的算法来计算最后一个索引(它实际上是初始序列的第一个索引),然后计算它从序列末尾到达答案的距离。增加是可交换的:)