题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
——来源于《剑指offer》
-
需要注意:
- 连续数组旨在强调数字是有序的,子数组的在父数组中的索引值应该是连续的
- 注意
max
和sum
的初始值不能为0,因为如果是0的话如果该数组的元素都为负数,此时输出的最大值是0,不符合题意。
-
代码实现:
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length == 0) {
throw new RuntimeException("invalid parameters");
}
int sum = array[0];
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (sum < 0) {
sum = array[i];
} else {
sum += array[i];
}
if (sum > max) {
max = sum;
}
}
return max;
}
}