NC19 子数组的最大累加和问题
描述
给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
题目保证没有全为负数的数据
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
示例1
输入:
[1, -2, 3, 5, -2, 6, -1]
复制
返回值:
12
import java.util.*;
public class Solution {
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxsumofSubarray (int[] arr) {
// write code here
int[] dp = new int[arr.length] ;
if(arr == null || arr.length == 0){
return -1 ;
}
dp[0] = arr[0] ;
for(int i = 1 ; i < arr.length ; i++){
if(dp[i-1] < 0){
dp[i] = arr[i] ;
}else{
dp[i] = dp[i-1] + arr[i] ;
}
}
int max = 0 ;
for(int num : dp){
max = Math.max(max , num);
}
return max ;
}
}