要求:输入数组,求其连续子数组最大和,要求时间复杂度为O(n)
思路:容易想到的是O(n^2)和O(n^3)的做法,遍历整个数组。O(n)要求遍历一遍,积累当前遍历的元素,如果>0,则跟已存的最大值相比;如果<0,则舍弃,重新积累。
public static int MaxSum2(int[] a)
{
int maxsum=0;
int sum=0;
for(int i=0;i<a.length;i++)
{
sum+=a[i];
if(sum>maxsum)
maxsum=sum;
else if(sum<0)
sum=0;
}
return maxsum;
}