描述
给定一个数组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
备注:
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
/*
采用动态规划
1. 每加一个值,与当前最大值进行比较
2. 如果加上一个值后,累加和为负数,则从新开始累加
*/
function maxsumofSubarray( arr ) {
let max = 0;
let sum = 0;
for(let i=0; i<arr.length; i++){
sum+=arr[i];
if(sum < 0){
sum = 0;
}
if(sum>max){
max = sum;
}
}
return max;
}
module.exports = {
maxsumofSubarray : maxsumofSubarray
};