问题描述:
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
样例输入:
[1, -2, 3, 5, -2, 6, -1]
样例输出:
12
代码:
public static void main(String[] args) {
int[] arr = {1, -2, 3, 5, -2, 6, -1};
System.out.println(longSum(arr));
}
private static int longSum(int[] arr){
int max = arr[0];
for(int i = 1;i<arr.length;i++) {
arr[i] = arr[i] + Math.max(arr[i - 1], 0);
max = Math.max(arr[i], max);
System.out.println("arr[" + i + "]=" + arr[i] + "\t max=" + max);
}
return max;
}
结果: