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
.
输入一个整形数组,数组里有正数也有负数,求所有子数组的和的最大值。
思路:从左向右遍历数组元素相加求和得到和sum,若sum小于0,必然会对总的和有损耗,因此将sum重置为0,从当前位置继续重复上述过程,直到数组结束,与此同时设置max变量记录求和过程中遇到的最大值。
执行完上述过程,判断max等于0(max初值为0),若大于0,max为所求结果,返回max。
若仍然等于0说明求和过程中未出现过正数,数组中全是负数或0,此时数组最大和就是数组中最大的最大的元素,返回数组中最大的元素即可。
代码如下:
class Solution {
public:
int maxSubArray(int A[], int n)
{
int sum=0,max=0;
for(int i=0;i<n;i++)
{
sum+=A[i];
if(sum<0)
sum=0;
if(sum>max)
max=sum;
}
if(max==0) //说明数组中无正数,遍历取0或者数
{
max=A[0];
for(int i=1;i<n;i++)
if(max<A[i])
max=A[i];
}
return max;
}
};