package Array
import "math"
func maxSubArray(nums []int) int {
nums = append([]int{0}, nums...)
prefixSum := make([]int, len(nums))
for i := 1; i < len(nums); i++ {
prefixSum[i] = prefixSum[i-1] + nums[i]
}
minPrefixSum := 0
maxSum := math.MinInt
for i := 1; i < len(nums); i++ {
maxSum = max(maxSum, prefixSum[i]-minPrefixSum)
minPrefixSum = min(minPrefixSum, prefixSum[i])
}
return maxSum
}