题目

图片说明

思路

初始化和为0,第一步,加上第一个数字1,此时和为1.,最大和也为1.接下来第二步加上-2,此时和为-1,最大和为1。第三步加上3,但是此时和为-1,而-1加3反而比3小,所以此时和应该直接变更为3,最大和也更新为3.接着加上10,和为13,最大和更新为13,然后加上-4,和为9,最大和不变仍为13,接着加上7和为16,最大和变为16……

综上所述,初始和为0,初始最大和为第一个元素,遍历数组求和时,每次循环都判断上一次的和是否小于等于零,若是,则直接把当前元素赋值给和;若不是,则直接加上当前元素。接着判断当前和是否大于最大和,若是,则将当前和赋值给最大和。

代码

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        if (array == null || array.length <= 0)
            return 0;
        int sum = 0;
        //int greatestSum = 0x80000000;
        int greatestSum = array[0];
        for (int i = 0; i < array.length; i++) {
            if (sum <= 0)
                sum = array[i];
            else
                sum += array[i];
            if (sum > greatestSum)
                greatestSum = sum;
        }
        return greatestSum;
    }
}