数组中连续子数组(最少有一个元素)的最大和

这是一篇关于计算数组中至少包含一个元素的连续子数组最大和的算法分析,要求时间复杂度为O(n)。通过维护当前子数组最大和cur_max和已知最大和sum_max,当cur_max变为负数时,重置cur_max,从下一个元素开始重新计算,以找到可能存在的更大子数组。最后,sum_max将保存最大和。
摘要由CSDN通过智能技术生成

题目描述
输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。

分析

方法简单,但是思路并不好想,记录之。

用sum_max记录已经出现的最大和,因为数组是有正有负的,一个明显的限制条件是:最大和只可能为正数

cur_max一直对数组中元素求和,当其为负的时候,肯定是加了某一个负数,所以该负数一定不在最大和的子数组中,此时,sum_max已经记录了该负数位置之前的最大和。

那么负数后面的数还有可能有更大的子数组吗?
这时,让cur_max置0,从下一个元素开始继续加和,发现更大的和,则赋值给sum_max

时间O(n),空间O(1)


# data = [2,4,-7,5,2,-1,2,-4,3]
data = [1,-2,
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值