3. What is the output of the following code snippet using divide and conquer to find maximum subarray sum?
def max_crossing_sum(arr, left, mid, right):
left_sum = float('-inf')
total = 0
for i in range(mid, left-1, -1):
total += arr[i]
if total > left_sum:
left_sum = total
right_sum = float('-inf')
total = 0
for j in range(mid+1, right+1):
total += arr[j]
if total > right_sum:
right_sum = total
return left_sum + right_sum
def max_subarray(arr, left, right):
if left == right:
return arr[left]
mid = (left + right) // 2
left_max = max_subarray(arr, left, mid)
right_max = max_subarray(arr, mid+1, right)
cross_max = max_crossing_sum(arr, left, mid, right)
return max(left_max, right_max, cross_max)
arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_subarray(arr, 0, len(arr)-1))