给定一个数组arr,返回子数组的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
[要求]
时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
// 注意:字符串和为负数时就看下一个索引!
var len=parseInt(readline());
var arr=readline().split(' ').map(Number);
var max=0;
if(arr.length==0){
console.log(0)
}else if(arr.length==1){
console.log(arr[0])
}else{
var tem=0;
// 关键在于;单个子串的和为负数时,这段子串也就无价值了!!!
// 然后从下个索引开始计算和,当和>max时就改变max的值,得到最大的值
for(var i=0;i<len;i++){
tem+=arr[i];
if(tem<0){
tem=0;
}else if(tem>max){
max=tem;
}
}
console.log(max)
}
前端基础笔记——子串的最大累加和(时间复杂度为O(n))
最新推荐文章于 2023-04-16 22:53:18 发布