Алекс, у вас очень элегантный алгоритм, но он нуждается в коррекции для массива, который содержит один отрицательный элемент.
Конечно, в оригинальном алгоритме Кадана можно получить начальный и конечный индексы подмассива, что полезно для определения «пути».:
def max_subarray(A):
(maxSum, maxStartIndex, maxEndIndex) = (float("-inf"), 0, 0)
(currentMaxSum,currentStartIndex,currentEndIndex ) = (0,0,0)
for item in A:
currentMaxSum = currentMaxSum + item
if currentMaxSum > maxSum :
(maxSum, maxStartIndex, maxEndIndex) = (currentMaxSum, currentStartIndex, currentEndIndex)
if currentMaxSum < 0 :
currentMaxSum = 0
currentStartIndex = currentEndIndex + 1
# continue here.
currentEndIndex = currentEndIndex + 1
return (maxSum, maxStartIndex, maxEndIndex)