解法一:暴力递归
思路:列出所有可能的子数组和,然后选取最大值

class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        if len(array) == 1:
            return array[0]
        result = []
        res = 0
        for i in array:
            res += i
            result.append(res)
        num = self.FindGreatestSumOfSubArray(array[1:])
        result.append(num)
        return max(result)

解法二:
动态规划

把子树和抽象的拆分成两个部分,即当前结点和前一个结点的最大子数和

F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变
F(i)=max(F(i-1)+array[i] , array[i])
res:所有子数组的和的最大值
res=max(res,F(i))

class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        if not array:
            return 0
        # res 不能和num一样设置为0,否则在给定数组全部为负的情况下将会出错
        res = None
        num = 0
        for i in range(len(array)):
            num = max([num+array[i], array[i]])
            # 第0个数的最大子树和为其本身
            if not res:
                res = num
            res = max([num, res])
        return res