# @param {Integer[]} nums
# @return {Integer}
def max_sub_array(nums)
    if nums.empty? then
        return nil
    end

    sum, running_sum = nums.first, nums.first
    nums.drop(1).each { |x|
        running_sum = [running_sum + x, x].max
        sum = [sum, running_sum].max
    }

    return sum
end

RSpec.describe "max_sub_array of " do
    it "[-2,1,-3,4,-1,2,1,-5,4] is 6" do
        expect(max_sub_array([-2,1,-3,4,-1,2,1,-5,4])).to eq(6)
    end

    it "[1] is 1" do
        expect(max_sub_array([1])).to eq(1)
    end

    it "[5,4,-1,7,8] is 23" do
        expect(max_sub_array([5,4,-1,7,8])).to eq(23)
    end
end