一个有N个整数元素的一维数组,那么子数组之和的最大值是什么?
例如:-2 5 3 -6 4 -8 6 maxsum=8
无论是高中学习c语言还是现在的Java,首先想法是就是找出所有的子数组,重复计算,然后求其和,取最大。
int Maxsum1(int *array,int n)
{
int max=-INF;
int sum;
int i,j;
for(i=0;i<n;i++) {="" sum="0;" for(j="i;j<n;j++)" sum+="array[j];" if(sum="">max)
max=sum;
}
}
return max;
}
</n;i++)>
还有一种想法,累加。重复累加,只要大于0,就说明当前的“和”可以继续增大,如果小于0了,说明“之前的最大和”已经不可能继续增大了,就从新开始。
int Maxsum3(int *array,int n)
{
int max=-INF;
int sum=0;
for(int i=0;i<n;i++) {="" if(sum<0)="" sum="array[i];" else="" sum+="array[i];" if(sum="">max)
max=sum;
}
return max;
}
</n;i++)>
附网络上高端的动态规划求解
2个数组的
更短的
真正接受的思路:
从左边开始,在这个过程中记录一个当前子数组的最大值,前几项小于零时则刷新所有数据,从后面一个数重新开始,当发现累加结构大于记录的最大值时,则替换,最后比较完后,记录的最大值就为真实的最大值。
感谢各位网络技术好人的分享==