题目:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4]
,
the contiguous subarray [4,−1,2,1]
has the largest sum = 6
.
对于前m个元素,最大总和子数组要么在前m-1个元素中,要么是其结束位置为m。
还需注意的一种情况是若所有的元素都为负值,则问题转化为求数组中的最大数。
代码如下:
int max(int l,int r)
{return (l>r)?l:r;
}
int maxSubArray(int A[], int n)
{
int TempMax=0,Maxending=0,negative=A[0];
for(int i=0;i<n;i++)
{
Maxending = max(Maxending+A[i],0);
TempMax = max(TempMax,Maxending);
if(A[i]>negative)negative=A[i];
}
if(negative<0)return negative;
else return TempMax;
}