每日一道算法题2021-10-19

151 阅读1分钟
JZ42 连续子数组的最大和
输入一个长度为n的整型数组a,数组中的一个或连续多个整数组成一个子数组。
求所有子数组的和的最大值。要求时间复杂度为 O(n).

提示:
1 <= n <= 500
-100 <= a[i] <= 100
public static int FindGreatestSumOfSubArray(int[] array) {
    /*
    连续子集最大和
    for循环即可
    如果前几位是小于0就可以不加
    * */
    if (array.length == 0 || array == null) {
        return 0;
    }
    int curSum = 0;
    int maxSum = Integer.MIN_VALUE;
    for (int i = 0; i < array.length; i++) {
        if (curSum <= 0) {
            // 找到第一个大于0的数
            curSum = array[i];
        } else {
            // 如果大于0就加上
            curSum += array[i];
        }
        if (curSum > maxSum) {
            maxSum = curSum;
        }
    }
    return maxSum;
}