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

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

作者: castlet | 来源:发表于2020-01-05 14:49 被阅读0次

    题目描述

    • 输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的最大和,要求事件复杂度为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

          本文链接:https://www.haomeiwen.com/subject/xpaqactx.html