描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
示例1
输入:
[1,-2,3,10,-4,7,2,-5]
复制返回值:
18
复制说明:
输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。
public class Jz30_FindGreatestSumOfSubArray {
@Test
public void test() {
int[] arr = {1, -2, 3, 10, -4, 7, 2, -5};
int i = FindGreatestSumOfSubArray(arr);
System.out.println(i);
}
public int FindGreatestSumOfSubArray(int[] array) {
if (null == array || 0 == array.length) {
return 0;
}
int sum = array[0];
int max = sum;
for (int i = 1; i < array.length; i++) {
if (sum < 0) {
sum = array[i];
} else {
sum += array[i];
}
if (max < sum) {
max = sum;
}
}
return max;
}
}