定义两个变量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 }