最大子数组之和
考虑:加上一个负数,和就会变小。
int MaxarySum(int a[], int Len) { int MaxSum = 0; //保存最大值 int CurSum = 0; int HeadIndex = 0; int EndIndex = 0; int i; for (i = 0; i < Len; i++) { CurSum = CurSum + a[i]; if (CurSum > MaxSum) { MaxSum = CurSum; //大于MaxSum则更新MaxSum EndIndex = i; } if (CurSum < 0) { CurSum = 0; //如果为负数,则丢弃重新计和 HeadIndex = i+1; } } if (MaxSum == 0) { MaxSum = a[0]; for (i = 1; i < Len; i++) { if (a[i] > MaxSum) { MaxSum = a[i]; HeadIndex = EndIndex = i; } } } printf("the HeadIndex is %d, EndIndex is %d\n",HeadIndex,EndIndex); return MaxSum; }
参考自:http://www.cnblogs.com/mixer/archive/2011/12/22/2447982.html

浙公网安备 33010602011771号