一個數組,長度為N,數組元素有負有正,如{-1, 4, 6, -3, 7, -3, -3, 9};我們可以清楚的知道最大的子數組應該是4到9,也就是下標1到下標7,和為17。
int MaxSubArraySum(int a[], int N, int &start, int &end)
{
int ThisSum, MaxSum, i, j;
*start = 0;
*end = 0;
MaxSum = 0;
for (i = 0; i < N; ++i)
{
ThisSum = 0;
for (j = i; j < N; ++j)
{
ThisSum += a[j];
if (ThisSum > MaxSum)
{
*start = i;
*end = j;
MaxSum = ThisSum;
}
}
}
return MaxSum;
}5、此方法的時間復雜度很明顯為(O(N^2))
int maxSubArraySum(int[] arr, int N, int &start, int end) {
int maxSum = 0;
int thisSum = 0;
int i;
*start = 0;
*end = 0;
for (i = 0; i < N; i++) {
thisSum += arr[i];
if (thisSum > maxSum){
maxSum = thisSum;
*end = i;
}
if (thisSum < 0){
thisSum = 0;
if(i <= N - 2 && arr[i+1] > 0){
*start = i + 1;
}
}
}
//如果最大子數組不在數組裡面的話(數組元素全部<=0),start,end賦值為-1
if(*start == 0 && *end == 0 && arr[0] <= 0){
*start = -1;
*end = -1;
}
return maxSum;
}