求子数组最大和

求子数组最大和_第1张图片

具体实现:

/*输入一组数组,求所有子数组的和的最大值。
例如:{1,-2,3,10,-4,7,2,-5},最大的子数组为{3,10,-4,7,2},和为18。*/

#include "iostream"

template <typename T>
T max_subArray(T* a, int n) //写成模板是想参数传递的类型多一点,double、int都可以适应。可是多了一个参数n不是特别完美。
{
	//int n = sizeof(a);
	if (n == 0)
		return 0;

	T current_max = a[0];
	T sub_sum = a[0];

	int i = 1;                   //只输出最大和,所以没有记录子数组起始终止位置,如有要求,也是可以记录的。
	while (i != n)
	{
		sub_sum += a[i];
		if (sub_sum > current_max)
		{
			current_max = sub_sum;
		}
		else if (sub_sum < 0)
		{
			sub_sum = 0;
		}
		i++;
	}
	return current_max;
}

using namespace std;
int main(void)
{
	int a[] = {1,-2,3,10,-4,7,2,-5};
	int result = max_subArray(a, sizeof(a)/sizeof(int));
	cout << result << endl;
	return 0;
}


说明:

1. 全负数情况也是可以通过测试的,为该数组元素最大值。

2. 空数组输出0。

你可能感兴趣的:(求子数组最大和)