您的位置:首页 > 其它

子题数组的最大累加和问题

2018-03-24 15:17 204 查看

算法常用技巧

子数组的最大累加和问题

题目

bilibili讲解传送门

https://www.bilibili.com/video/av21178974/

给定一个数组arr,返回子数组的最大累加和。

例如,arr=[1,-2,3,5,-2,6,-1],所有的子数组中,[3,5,-2,6] 可以累加出最大的和12,所以返回12。

【要求】

如果arr长度为N,要求时间复杂度为O(N),额外空间复杂度为

O(1)。



public class SubArrayMaxSum {

public static int maxSum(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int max = Integer.MIN_VALUE;
int cur = 0;
for (int i = 0; i != arr.length; i++) {
cur += arr[i];
max = Math.max(max, cur);
cur = cur < 0 ? 0 : cur;
}
return max;
}

public static void printArray(int[] arr) {
for (int i = 0; i != arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}

public static void main(String[] args) {
int[] arr1 = { -2, -3, -5, 40, -10, -10, 100, 1 };
System.out.println(maxSum(arr1));

int[] arr2 = { -2, -3, -5, 0, 1, 2, -1 };
System.out.println(maxSum(arr2));

int[] arr3 = { -2, -3, -5, -1 };
System.out.println(maxSum(arr3));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: