子数组的最大和

定义两个变量nSum、nMaxSum,其中nSum用来存储当前和,nMaxSum用来存储最大和,若nSum <= 0,则需从下一个数开始重新记录当前和,每计算一次当前和,需与nMaxSum比较,若nSum > nMaxSum则需更新nMaxSum,反之不需更新。

基于上述分析,写出代码如下:

 1 int SubArrayMaxSum(int *arr, int N)
 2 {
 3     assert (arr != NULL);
 4 
 5     assert (N > 0);
 6 
 7     int nSum = 0;
 8 
 9     // 将int型的最小值INT_MIN赋给nMaxSum,其中INT_MIN在头文件limits.h中定义
10     int nMaxSum = INT_MIN;
11 
12     for (int i = 0; i < N; ++i)
13     {
14         if (nSum <= 0)
15         {
16             nSum = arr[i];
17         }
18         else
19         {
20             nSum += arr[i];
21         }
22 
23         if (nSum > nMaxSum)
24         {
25             nMaxSum = nSum;
26         }
27     }
28 
29     return (nMaxSum);
30 }
原文地址:https://www.cnblogs.com/ldjhust/p/2993563.html