Max subsum
Given an array of positive and negative integers, find the max subsum along with indices.
Solution
- Max subsum ending at j, is sum of all elements upto j minus min-sum of all elements upto j (to account for negative numbers whose sum must be subtracted)
 
Code
def max_subsum(arr)
    return nil unless arr
    sum = 0
    max_sum = 0
    min_sum = 0
    min_index = 0
    max_start = 0
    max_end = 0
    arr.each.with_index do |e, i|
        sum += e
        if sum < min_sum
            min_sum = sum
            min_index = i
        end
        if sum - min_sum > max_sum
            max_sum = sum - min_sum
            max_start = min_index + 1
            max_end = i + 1
        end
    end
end
Complexity
- Time: O(n) since we do only a single pass over the array
 - Space: constant, since we use max of 5 variables to keep track of rolling sum