题目描述
- 输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的最大和,要求事件复杂度为O(n)。
解题思路
- 用一个变量maxSum保存最大和,用一个变量curSum保存当前连续子数组的和。
- 遍历数组,如果curSum小于等于0,则curSum为当前遍历的数字。
- 如果curSum大于0,则设置curSum为curSum加上当前遍历的数字。
- 如果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;
}
网友评论