题目:一个整数数组中的元素有正有负,在该数组中找出一个连续的数组,要求连续的数组的和是最大的,我们成这个子数组就是最大的连续子数组。
分析:对于这个找最大子数组的数组,如果这个数组里面全部是正数,那就不用考虑了,所有元素相加就是最大的子数组了;如果全部为负,则就是找里面的最大的元素;如果有正有负,则情况会麻烦一下。下面提供四种解法。
解法一:
int FindSubSum1(int *arr,int length)
{
int maxSum = 0;
for(int i = 0; i < length; i++)
{
int curMax = 0;
for(int j = i; j < length; j++)
{
curSum += arr[i];
if(curSum > maxSum)
maxSum = curSum;
}
}
return maxSum;
}
解法看起来就非常的简单粗暴,两轮循环,先从第一个数开始往后累加,每次累加之后都和最大的和比较,找到最大的那个累加和;然后从第二个往后累加,以此类推。该算法的时间复杂度为O(n^2)。
解法二:
int FindSubSum2(int *arr,int length)
{
int maxSum = 0, curMax = 0;
for(int i = 0; i < length; i