如题:求子数组的最大值之和并给出子数组的下标
参考文献:http://blog.csdn.net/bertzhang/article/details/7242497
http://blog.csdn.net/zsuguangh/article/details/6337410
下面给出一种方法:
#include "stdafx.h"
#include<iostream>
using namespace std;
int maxsum(int a[],int n,int *start,int *end)
{
int laststart;
int lastmax = a[0];
int max = 0;
if(a == NULL || n == 0)
{
return NULL;
}
for(int i = 0; i< n; i++)
{
max = max + a[i];
if(max > lastmax)
{
lastmax = max;
*end = i;
}
if(max <= 0 )
{
max = 0;
if(i < n)
{
laststart = i + 1;
}
}
if(max == lastmax)
{
*start = laststart;
}
}
return lastmax;
}
int main()
{
int array[]= {-1,2,-3,4,5,6,7,-9,-19,4,3};
int start = 0;
int end = 0;
cout<< maxsum(array,sizeof(array)/sizeof(int),&start,&end)<<endl;
cout<<start<<" "<<end<<endl;
system("pause");
return 0;
}