标签:求最大子数组
一个数组,长度为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;
	}求最大子数组的和,以及求该最大子数组的起始位置和末尾位置,布布扣,bubuko.com
标签:求最大子数组
原文地址:http://blog.csdn.net/dafeng_blog/article/details/25336931