《剑指offer第二版》面试题42:连续子数组的最大和(java)

题目描述

  • 输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的最大和,要求事件复杂度为O(n)。

解题思路

  1. 用一个变量maxSum保存最大和,用一个变量curSum保存当前连续子数组的和。
  2. 遍历数组,如果curSum小于等于0,则curSum为当前遍历的数字。
  3. 如果curSum大于0,则设置curSum为curSum加上当前遍历的数字。
  4. 如果curSum大于maxSum,则更maxSum为curSum的值。

代码

int findMaxsum(int[] arrs) {
    if (arrs == null || arrs.length <= 0) {
        return 0;
    }
    int curSum = 0;
    int maxSum = Integer.MIN_VALUE;
    for (int i = 0; i < arrs.length; i ++) {
        if (curSum <= 0) {
            // 和小于等于0
            curSum = arrs[i];
        } else {
            // 和大于0
            curSum = curSum + arrs[i];
        }
        if (curSum > maxSum) {
            // 更新最大值
            maxSum = curSum;
        }
    }
    return maxSum;
}

你可能感兴趣的:(《剑指offer第二版》面试题42:连续子数组的最大和(java))