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

参考书目:数据结构与算法分析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.  
点赞