Max subarray Problem
Max subarray Problem
The Maximum Subarray Problem is to find the contiguous subarray within a one-dimensional
array of numbers (both positive and negative) that has the largest sum. Given an array A of n
integers, find indices i and j such that the sum of elements A[i] + A[i+1] + ... + A[j] is
maximized, where 0 ≤ i ≤ j < n.
PSEUDOCODE
function maxCrossingSum(arr, l, m, h)
# Include elements on left of mid.
sm = 0
left_sum = -10000
for i =m to l
sm = sm + arr[i]
if (sm > left_sum):
left_sum = sm
# Include elements on right of mid
sm = 0
right_sum = -10000
for i =m to h
sm = sm + arr[i]
if (sm > right_sum):
right_sum = sm
return max(left_sum + right_sum - arr[m], left_sum, right_sum)
function maxSubArraySum(arr, l, h):
if (l > h)
return -10000
if (l == h)
return arr[l]
m = (l + h) // 2
return max(maxSubArraySum(arr, l, m-1),
maxSubArraySum(arr, m+1, h),
maxCrossingSum(arr, l, m, h))
PROBLEM 1
TIME COMPLEXITY
O(n log n) because we recursively split the array into halves (log n levels), and at each level,
combining the results takes linear time (O(n)).