3. What is the output of the following Go code snippet that uses divide and conquer to find maximum subarray sum?
package main
import "fmt"
func maxCrossingSum(arr []int, low, mid, high int) int {
leftSum := -1 << 31
sum := 0
for i := mid; i >= low; i-- {
sum += arr[i]
if sum > leftSum {
leftSum = sum
}
}
rightSum := -1 << 31
sum = 0
for j := mid + 1; j <= high; j++ {
sum += arr[j]
if sum > rightSum {
rightSum = sum
}
}
return leftSum + rightSum
}
func maxSubArray(arr []int, low, high int) int {
if low == high {
return arr[low]
}
mid := (low + high) / 2
leftMax := maxSubArray(arr, low, mid)
rightMax := maxSubArray(arr, mid+1, high)
crossMax := maxCrossingSum(arr, low, mid, high)
if leftMax >= rightMax && leftMax >= crossMax {
return leftMax
} else if rightMax >= leftMax && rightMax >= crossMax {
return rightMax
} else {
return crossMax
}
}
func main() {
arr := []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
fmt.Println(maxSubArray(arr, 0, len(arr)-1))
}