這個題做過也看到過,最近也看到過,今天又做,把人家的代碼貼上,哈哈
/********************************************************************
    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-2310-472-5};   
    
//int a[]={-1,-2,-3,-4};  //測試全是負數的用例   
    cout<<"Max sum: "<<maxSum(a,8)<<endl;   
}