package leetcode
import "math"
func maxSubarraySumCircular(A []int) int {
	n, sum := len(A), 0
	for _, v := range A {
		sum += v
	}
	kad := kadane(A)
	for i := 0; i < n; i++ {
		A[i] = -A[i]
	}
	negativeMax := kadane(A)
	if sum+negativeMax <= 0 {
		return kad
	}
	return max(kad, sum+negativeMax)
}
func kadane(a []int) int {
	n, MaxEndingHere, maxSoFar := len(a), a[0], math.MinInt32
	for i := 1; i < n; i++ {
		MaxEndingHere = max(a[i], MaxEndingHere+a[i])
		maxSoFar = max(MaxEndingHere, maxSoFar)
	}
	return maxSoFar
}
func max(a int, b int) int {
	if a > b {
		return a
	}
	return b
}