Прежде всего, выражение sum-array[0]>sum
эквивалентно array[0]<0
. Аналогичное наблюдение относится и к тем другим условиям, которые есть в вашем коде.
Ваш алгоритм неверен. Комментарий, который вы здесь, не соответствует действительности:
}else{
return sum // this is the largest subarray sum, can not increase any further
}
Когда вы получите в этот момент, вы знаете, что оба внешних значения положительны, но где-то в массиве может быть подрешетка с отрицательной суммой, который - при удалении - даст два оставшихся подмассива, из которых один (или оба) может иметь сумму, превышающую общую сумму.
Например, следующий случай будет таким случаем:
[1, -4, 1]
Ваш алгоритм сделает вывод, что максимальная сумма достигается путем взятия полного массива (сумма равна -2), однако подмассив [1] представляет большую сумму.
Другой счетчик примеры:
[1, 2, -2, 1]
[1, -3, -3, 1, 1]