/** * 题目2 输入一个整型数组,数组里有正数也有负数。数组中一个或连 * 续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 * * @param arr 输入数组 * @return 最大的连续子数组和 */
public static int findGreatestSumOfSubArray(int[] arr) {
// 参数校验
if (arr == null || arr.length < 1) {
throw new IllegalArgumentException("Array must contain an element");
}
// 记录最大的子数组和,开始时是最小的整数
int max = Integer.MIN_VALUE;
// 当前的和
int curMax = 0;
// 数组遍历
for (int i : arr) {
// 如果当前和小于等于0,就重新设置当前和
if (curMax <= 0) {
curMax = i;
}
// 如果当前和大于0,累加当前和
else {
curMax += i;
}
// 更新记录到的最在的子数组和
if (max < curMax) {
max = curMax;
}
}
return max;
}