题目描述
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
时间复杂度为O(n),空间复杂度为O(1)
public class MaxsumofSubarrayMe {
public static void main(String[] args) {
int[] arr = {1, -2, 3, 5, -2, 6, -1};
MaxsumofSubarrayMe maxsumofSubarrayMe = new MaxsumofSubarrayMe();
System.out.println(maxsumofSubarrayMe.maxsumofSubarray(arr));
}
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxsumofSubarray (int[] arr) {
if(null == arr){
return 0;
}
int curSum = 0;
int max = 0; // 保留最大的和
for (int i = 0; i < arr.length; i++) {
curSum += arr[i];
if(curSum > max){
max = curSum;
}
// 累计相加的和小于0
curSum = curSum < 0 ? 0 : curSum;
}
return max;
}
}