今天,我们一起做一个题目,即求出一个整数数组中的所有子数组的最大和。
//求一个整数数组中的所有子数组的最大和 #include <stdlib.h> #include <stdio.h> int GetMaxChildArraySum(int * pInput, int nLen, int * pOut) { if (!pInput || !pOut) return 0; if (nLen < 0) return 0; int nSum = 0; int nTempSum = 0; int nMax = pInput[0]; int i = 0; for (i = 0; i < nLen; i++) { if (nTempSum <= 0) { //如果累加和小于等于0,则表示前面的子数组是拖累,甩掉它们。 //从当下的元素重新计算子数组的开始位置。 nTempSum = pInput[i]; } else { nTempSum += pInput[i]; } if (pInput[i] > nMax) { nMax = pInput[i]; } if (nTempSum > nSum) { nSum = nTempSum; } } if (nMax < 0) { //如果都是负数,则返回最大值。 *pOut = nMax; return 1; } *pOut = nSum; return 1; } void main() { int Array[] = { 1, 2, 3, -10, -4, -7, -2, -5 }; int nTemp = 0; GetMaxChildArraySum(Array, 8, &nTemp); printf("数组最大和:%d\n", nTemp); system("pause"); return; }运行效果如下:
图1 运行效果