思路
题目
给一串数字,找 连续 的一串数字,他们相加的最大值是几多。
eg. -2,11,-4,13,-5,-2
很明显,11, -4,13这一段加起来是最大的为20.
解法
1.可以发现,已经遍历过的数当和为整数,那么对后面的数还是有贡献的, 当是负数,只会拖后面数的后腿,不如把它直接删掉。
也就是把已经遍历的数看做一个数,再把他和后面的数一起搭配。
2.复杂度 遍历一遍,一看就是O(n).
上码
下面展示他的代码
int maxSum(int *a,int n)//a是求的数列,n为数列的个数。
{
int maxSum_s=0;//最大数列和
int tempSum=0;//当前的最大
for(int i=0;i<n;i++)
{
tempSum+=a[i];
if(tempSum<0)//当前为负数了,前面的都没有用了。
{
tempSum=0;
}
if(tempSum>maxSum)//如果当前数列和大于后面的,那不取代了maxSum。
{
maxSum=tempSum;
}
}
return maxSum;
}
后面的用分治算法还有啥啥算法复习到再来补充吧,再见