题目描述:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。
例如输入的数组为1, -2,3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出该子数组的和为18。
最残暴的暴力破解:遍历所有连续子数组,取其中和最大的连续子数组。
// Brute force attack
#include<iostream>
#include<iomanip> //流控制
#include<climits>
using namespace std;
void FindMaxSubArr(int Arr[],int length);
int main()
{
const int length=6;
int Data[length]={-13,-3,25,20,-3,-18,};
FindMaxSubArr(Data,length);
return 0;
}
void FindMaxSubArr(int Arr[],int length)
{
int Max=INT_MIN,low,high;
for(int i=0;i<length-1;i++)
{
int sum=Arr[i];
for(int j=i+1;j<length;j++)
{
sum+=Arr[j];
if(sum>Max)
{
Max=sum;
low=i;
high=j;
}
}
}
cout<<"the maximum subarray is :"
<<'['<<low<<','<<high<<']'
<<"The sum is :"<<Max<<endl;
}