数据结构和算法学习系列之最大子序列求和问题的O(N)时间复杂度

本文详细解析了数据结构与算法分析中一种O(N)时间复杂度的方法,特别是针对求解子数组最大和的问题。通过重置当前和为零的方式优化算法,使得算法能够高效地找到最大子数组和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考书目:数据结构与算法分析C++描述(第3版) Mark Allen Weiss

书中介绍的第四种方法O(N)时间复杂度比较难理解,所以在看懂之后写了注释,比较难理解的位置是thisSum < 0的情况,如果当前和小于零,则当前和重置为零。即重置起点,置零意味着将i向前提到当前处也即thissum为计数起点maxsum已经记住过去最大值的终点

1.  int maxSubSum (int data[])  
2.  {  
3.      int maxSum=0;  
4.      int thisSum=0;  
5.      for(int i=0; i<sizeof(data); i++) 
6.       {  
7.          thisSum += a[i];  
8.          if(thisSum > maxSum)  
9.  //如果当前的和大于最大和,则替换覆盖
10.             maxSum = thisSum;  
11.         else if(thisSum < 0)  
12. //如果当前和小于零,则当前和重置为零。即重置起点,置零意味着将i向前提到当前处也即thissum为计数起点maxsum已经记住过去最大值的终点
13.             thisSum = 0;  
14.     }  
15.     return maxSum;  
16. }  
17.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值