輸入一個整型數組,數組裏有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間複雜度爲O(n)。
例如輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,
因此輸出爲該子數組的和18。
注:有些題目要求的是如果序列全爲負數就返回0,但此函數中,如果序列全爲負數,則返回最大的負數
define array b, sum=a[0], b[0] = a[0]
for i <- 0 to 10
b[j] = max{a[j] + b[j-1], a[j]}
sum = max{sum, b[i]
return sum
C++實現
template <typename T>
T MaxConSum(const T *a, int n)
{
//initialize
T b[n];
T sum = a[0];
b[0] = a[0];
for(int i = 1; i != n; ++i)
{
//use state equation to assign array b
b[i] = max(a[i], b[i-1] + a[i]);
if(sum <= b[i])
{
//sum store the max value of array b
sum = b[i];
}
}
return sum;
}