题目描述
一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn =1e5+5;
int arr[maxn];
int div(int arr[],int l,int r)
{
int mid=(l+r)/2;
if(l==r)
{
return arr[l];
}
int temp=arr[mid];
int max1=temp;
for(int i=mid+1;i<r;++i)
{
temp+=arr[i];
if(temp>max1)
{
max1=temp;
}
}
temp=arr[mid-1];
int max2=temp;
for(int i=mid-2;i>=l;--i)
{
temp+=arr[i];
if(temp>max2)
{
max2=temp;
}
}
int max3=max1+max2;
int ans=max3;
ans=ans>div(arr,l,mid)?ans:div(arr,l,mid);
ans=ans>div(arr,mid+1,r)?ans:div(arr,mid+1,r);
return ans;
}
int main()
{
int n;
while(cin>>n)
{
for(int i=0;i<n;++i)
{
cin>>arr[i];
}
arr[n]=-1<<30;
cout<<div(arr,0,n)<<endl;
}
return 0;
}