這個題做過也看到過,最近也看到過,今天又做,把人家的代碼貼上,哈哈

/**//********************************************************************
purpose:

求子數組的最大和/求連續子數組的最大和
題目描述:
輸入一個整形數組,數組里有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間復雜度為O(n)。

例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,
因此輸出為該子數組的和18。

*********************************************************************/

#include <iostream>

using namespace std;

int maxSum(int* a, int n)


{
int sum=0;
//其實要處理全是負數的情況,很簡單,如稍后下面第3點所見,直接把這句改成:"int sum=a[0]"即可
//也可以不改,當全是負數的情況,直接返回0,也不見得不行。
int b=0;

for(int i=0; i<n; i++)

{
if(b<0) //
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}

void Test_MaxSumOfSequenceSubArr()


{

int a[10]=
{1, -2, 3, 10, -4, 7, 2, -5};
//int a[]={-1,-2,-3,-4}; //測試全是負數的用例
cout<<"Max sum: "<<maxSum(a,8)<<endl;
}